Drupal kode snippets

Her på siden samler jeg brugbare kode snippets, som jeg benytter når jeg koder Drupal theme.
De fleste koder skal benyttes i filen template.php!

Fjerne CSS filer

<?php
function THEME-NAVNV_css_alter(&$css) {
// Remove Drupal core css
$exclude = array(


'modules/aggregator/aggregator.css' => FALSE,
'modules/block/block.css' => FALSE,
'modules/book/book.css' => FALSE,
'modules/comment/comment.css' => FALSE,
'modules/dblog/dblog.css' => FALSE,
'modules/field/theme/field.css' => FALSE,
'modules/file/file.css' => FALSE,
'modules/filter/filter.css' => FALSE,
'modules/forum/forum.css' => FALSE,
'modules/help/help.css' => FALSE,
'modules/menu/menu.css' => FALSE,
'modules/node/node.css' => FALSE,
'modules/openid/openid.css' => FALSE,
'modules/poll/poll.css' => FALSE,
'modules/profile/profile.css' => FALSE,
'modules/search/search.css' => FALSE,
'modules/statistics/statistics.css' => FALSE,
'modules/syslog/syslog.css' => FALSE,
'modules/system/admin.css' => FALSE,
'modules/system/maintenance.css' => FALSE,
'modules/system/system.css' => FALSE,

'modules/system/system.maintenance.css' => FALSE,
'modules/system/system.messages.css' => FALSE,
'modules/system/system.menus.css' => FALSE,
'modules/system/system.theme.css' => FALSE,


'modules/taxonomy/taxonomy.css' => FALSE,
'modules/tracker/tracker.css' => FALSE,

'modules/user/user.css' => FALSE,
'misc/vertical-tabs.css' => FALSE,
// Remove contrib module CSS
drupal_get_path('module', 'ctools') . '/css/ctools.css' => FALSE,
drupal_get_path('module', 'webform') . '/css/webform.css' => FALSE,
drupal_get_path('module', 'date') . '/date_popup/themes/datepicker.1.7.css' => FALSE,
drupal_get_path('module', 'date') . '/date_api/date.css' => FALSE,
drupal_get_path('module', 'date') . '/date_repeat_field/date_repeat_field.css' => FALSE,
drupal_get_path('module', 'views') . '/css/views.css' => FALSE, );
$css = array_diff_key($css, $exclude);
}
?>

Er bruger logget ind eller ej?

<?php if (!$user->uid) { ?>
... jeg er IKKE logget ind ...
<?php } ?>

<?php if ($user->uid) { ?>
... jeg ER logget ind ...
<?php } ?>

Body class - hvis block i region

<?php

// Body class
function THEME-NAVN_preprocess_html(&$variables) {
 
$node = menu_get_object();
  if (isset(
$node) && isset($variables['page']['REGION-NAVN'])) {
    
$variables['classes_array'][] = 'DIN-CLASS-TIL-BODY';
  }
}

?>

Breadcrumbs

I page.tpl kan man smide <?php print $breadcrumb ?>
For at ændre på html'en kan man i template.php smide nedenstående.

<?php
function aturesponsive_breadcrumb($variables) {
 
$breadcrumb = $variables['breadcrumb'];
 
$crumbs = '';
  if (!empty(
$breadcrumb)) {
   
$crumbs = '<ul class="breadcrumb-nav">';
    foreach(
$breadcrumb as $value) {
     
$crumbs .= '<li>' . $value . '<span>/</span> </li>';
    }
   
$crumbs .= '<li>' . drupal_get_title() . '</li></ul>';
  }
  return
$crumbs;
}
?>

Print kun første billede

Hvis du har et felt til flere billeder, men kun vil printe det første billede i node.tpl kan det gøres med:

<?php
 
if (count($content['field_XXX']) > 0) {
      print
render($content['field_XXX'][0]);  // Only render the first image
     
hide($content['field_XXX']); 
}
?>

Tjek om field findes

<?php $field = field_get_items('node', $node, 'field_XXX'); if ($field) { ?>
.....
<?php } ?>

Print view direkte i tpl fil

<?php print views_embed_view('NAVN-PÅ-VIEW','block_1'); ?>

Tjek for sprog

Print forskellige elementer til forskellige sprogversioner.
Her tjekkes for hvilket sprog der vises:

<?php global $language;
if (
$language->language == 'da') { ?>

...........
<?php } ?>

Her er det både dansk og engelsk der vises

<?php global $language;
if (
$language->language == 'da' || $language->language == 'en') { ?>

...........
<?php } ?>

Drupal 7 menu output

<?php
/* main ul */
function THEME-NAVN_menu_tree__main_menu($variables) {
  return
'' . $variables['tree'] . '';
}

/* inner ul */
function THEME-NAVN_menu_tree__main_menu_inner($variables) {
    return
'' . $variables['tree'] . '';
}

/* inner li */
function THEME-NAVN_menu_link__main_menu_inner($variables) {
 
$element = $variables['element'];
 
$sub_menu = '';

  if (
$element['#below']) {
   
$sub_menu = drupal_render($element['#below']);
  }
 
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return
'' . $output . $sub_menu . "\n";
}

/* main li */
function THEME-NAVN_menu_link__main_menu(array $variables) {
 
$element = $variables['element'];
 
$sub_menu = '';

  if (
$element['#below']) {
    foreach (
$element['#below'] as $key => $val) {
      if (
is_numeric($key)) {            
       
$element['#below'][$key]['#theme'] = 'menu_link__main_menu_inner'; // 2 lavel
     
}
    }
   
$element['#below']['#theme_wrappers'][0] = 'menu_tree__main_menu_inner'// 2 lavel
   
$sub_menu = drupal_render($element['#below']);
  }
 
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return
'' . $output . $sub_menu . "\n";
}
?>

Kilde: https://www.drupal.org/node/1178784#comment-7996803

Drupal webform

Tilføj google onclick event tracking til en webform i Drupal 7

<?php
function THEME-NAVN_form_webform_client_form_XXXX_alter(&$form, &$form_state) {
   
$form['actions']['submit']['#attributes'] = array('onclick' => "ga('send', 'event', { eventCategory: 'Ring mig op', eventAction: 'Udfyldt'});");
}
?>

XXXX = webform id (eks. 2954)

Antal af genveje (menu)

Det maksimale antal af genvej er pr. default sat til 7.
Det kan ændre ved at tilføje følgende i settings.php

<?php
/**
* Configuration option to set max number of shortcuts on the shortcut bar
*/
$conf['shortcut_max_slots'] = 20;
?>

Tilføj ekstra custom filer til theme filerne

Eksempelvis når du designer, er det fedt at kunne splitte theme filerne op i mindre dele.
Indsættes eksempelvis i page.tpl.php

<?php require("DIN-NYE-FIL.inc");?>

Her kalder vi en fil med navnet "DIN-NYE-FIL.inc", som kan indeholde al den kode du ønsker.