Du er ikke logget ind: Log ind eller opret profil
 
Tips & Tricks

Udvid dine muligheder med template filer

Problemstilling: 

Du står lige og mangler nogle mere specifikke .tpl filer til din theming

Løsning: 

Ved at gøre brug at et par preprocess funktioner i dit themes templat.php kan du udvide udvalget af tpl filer som Drupal leder efter.
Start med at åbne din template.php og kopier følgende kode ind i filen:
function phptemplate_preprocess_page(&$vars){
//the path module is required and must be activated
if(module_exists('path')){
//gets the "clean" URL of the current page
$alias = drupal_get_path_alias($_GET['q']);
$suggestions = array();
$template_filename = 'page';
foreach(explode('/', $alias) as $path_part)
{
$template_filename = $template_filename.'-'.$path_part;
$suggestions[] = $template_filename;
}
$vars['template_files'] = $suggestions;
}
}

function phptemplate_preprocess_node(&$vars){
//default template suggestions for all nodes
$vars['template_files'] = array();
$vars['template_files'][] = 'node';
//individual node being displayed
if($vars['page']){
$vars['template_files'][] = 'node-page';
$vars['template_files'][] = 'node-'.$vars['node']->type.'-page';
$vars['template_files'][] = 'node-'.$vars['node']->nid.'-page';
}
//multiple nodes being displayed on one page in either teaser
//or full view
else{
//template suggestions for nodes in general
$vars['template_files'][] = 'node-'.$vars['node']->type;
$vars['template_files'][] = 'node-'.$vars['node']->nid;
//template suggestions for nodes in teaser view
//more granular control
if($vars['teaser']){
$vars['template_files'][] = 'node-'.$vars['node']->type.'-teaser';
$vars['template_files'][] = 'node-'.$vars['node']->nid.'-teaser';
}
}
}

function phptemplate_preprocess_block(&$vars){
//the "cleaned-up" block title to be used for suggestion file name
$subject = str_replace(" ", "-", strtolower($vars['block']->subject));
$vars['template_files'] = array('block', 'block-'.$vars['block']->delta, 'block-'.$subject);
}
Hvis du leger i et subtheme er chancen at phptemplate_preprocess allerede er i brug, så omdøber du den blot til mit-theme-navn_preprocess_foobar
Det er vigtigt at du husker at tømme din cache ellers fanger Drupal ikke de nye skabeloner eller theming funktioner.
 

  • Du finder clear knappe i bunden under "Administer -> Site configuration -> Performance"
  • Du kan kalde drupal_rebuild_theme_registry(). (Tip: placer dette i toppen af din template.php fil mens du udvikler, det er vigtigt du fjerne det igen når sitet går live)

 
Ved at indsætte følgende i bunden af de enkelte preprocess funktioner kan du få vist hvilke tpl filer drupal leder efter:
echo '<pre>';
print_r($vars['template_files']);
echo '</pre>';

 
Håber ovenstående kan bruges til noget

Afprøvet i version: 
6.x
5
Din bedømmelse: Ingen Gennemsnit: 5 (2 stemmer)

1 kommentarer

Indsend kommentar

function phptemplate_preprocess_page(&$vars){    //the path module is required and must be activated    if(module_exists('path')){    //gets the "clean" URL of the current page     $alias = drupal_get_path_alias($_GET['q']);     $suggestions = array();     $template_filename = 'page';     foreach(explode('/', $alias) as $path_part)     {     $template_filename = $template_filename.'-'.$path_part;     $suggestions[] = $template_filename;     }     $vars['template_files'] = $suggestions;    }}     function phptemplate_preprocess_node(&$vars){    //default template suggestions for all nodes    $vars['template_files'] = array();    $vars['template_files'][] = 'node';    //individual node being displayed    if($vars['page']){     $vars['template_files'][] = 'node-page';     $vars['template_files'][] = 'node-'.$vars['node']->type.'-page';     $vars['template_files'][] = 'node-'.$vars['node']->nid.'-page';    }    //multiple nodes being displayed on one page in either teaser    //or full view    else{    //template suggestions for nodes in general     $vars['template_files'][] = 'node-'.$vars['node']->type;     $vars['template_files'][] = 'node-'.$vars['node']->nid;     //template suggestions for nodes in teaser view     //more granular control     if($vars['teaser']){     $vars['template_files'][] = 'node-'.$vars['node']->type.'-teaser';     $vars['template_files'][] = 'node-'.$vars['node']->nid.'-teaser';     }    }}function phptemplate_preprocess_block(&$vars){    //the "cleaned-up" block title to be used for suggestion file name    $subject = str_replace(" ", "-", strtolower($vars['block']->subject));    $vars['template_files'] = array('block', 'block-'.$vars['block']->delta, 'block-'.$subject);

  • Det er gratis
  • Du kan skrive artikler og tips
  • Du kan få hjælp eller hjælpe andre 
  • - og meget mere …