2010-07-06 5 views
1

Comment puis-je basculer vers un fichier de modèle de thème différent pour n'importe quel nœud que je veux? Je comprends comment créer des sous-thèmes comme node-recipes.tpl.php pour un noeud qui a un chemin de "recettes". Mais ce que je veux avoir le contrôle de l'ensemble du modèle de base comme page.tpl.php. Puis-je utiliser une fonction de pré-traitement dans template.php pour cela?Fichier de modèle de thème principal Drupal pour n'importe quel nœud

En ce moment, j'ai dans mon fichier template.php:

function mythemename_preprocess_node(&$vars) { 

    // template name for current node id 
    $suggestions = array('node-'. $vars['nid']); 

    // additional node template names based on path alias 
    if (module_exists('path')) { 
    // we already can have a path alias 
    if (isset($vars['path'])) { 
     $alias = $vars['path']; 
    }else{ 
     // otherwise do standard check 
     $alias = drupal_get_path_alias('node/'. $vars['nid']); 
    } 

    if ($alias != 'node/'. $vars['nid']) { 
     $add_path = ''; 
     foreach (explode('/', $alias) as $path_part) { 
     $add_path .= !empty($path_part) ? $path_part.'_' : ''; 
     $suggestions[] = 'node-'. $add_path; 
     } 
     // adding the last one (higher priority) for this path only 
     // node-some-long-path-nofollow.tpl.php (not for anchestors) 
     $suggestions[] = end($suggestions) .'-nofollow'; 
    } 

    $suggestions=array_map(stripTag, $suggestions); 
    //print_r($suggestions); 

    } 
    $vars['template_files'] = isset($vars['template_files']) ? array_merge($vars['template_files'], $suggestions) : $suggestions; 
} 

grâce

Répondre

3

Oui,

Vous pouvez contrôler entièrement le tableau $ vars [ 'de template_files']. Je suggère toujours d'ajouter sur le tableau plutôt que de l'écraser complètement.

J'ai un module que je maintiens qui ajoute quelques petites suggestions que j'utilise souvent. http://github.com/electblake/template_suggestions/blob/master/template_suggestions.module

Vous pouvez manipuler les vars $ [ 'de template_files'] du tableau dans preprocess_node, preprocess_page, etc.

Si vous voulez vous passer page.tpl.php à un autre fichier thème le faire dans le crochet de preprocess_page ...

+0

Merci, je vais vérifier. Si je voulais utiliser un fichier de modèle spécial pour un noeud du type "page" qui a le chemin d'accès "news", comment l'implémenterais-je? Est-ce que j'ajouterais du code dans l'instruction "($ hook == 'page')" if pour vérifier un template avec cet alias comme ceci: node-news.tpl.php ou news.tpl.php? merci – EricP

+0

Cette fonction "template_suggestions_preprocess" peut-elle être utilisée dans le fichier template.php ou doit-elle être utilisée dans un module? – EricP

+0

1) J'ignore généralement l'URL des nœuds, je travaille uniquement avec le hook_preprocess et le $ vars ['node'] -> type. Cela m'a permis de changer n'importe quel pathautos etc au besoin. Dans le cas de hook_preprocess_page() vous pouvez voir l'URL de la page dans la variable $ vars, il faudrait que je regarde mais un rapide dpm ($ vars) devrait le montrer près du bototm. – electblake

0

J'utilise cette fonction pour créer des suggestions de modèles qui fonctionnent pour moi maintenant. Merci à tous pour les suggestions.

/** 
* Override or insert PHPTemplate variables into the templates. 
* These are the main outer templates such as page.tpl.php 
*/ 
function phptemplate_preprocess_page(&$vars) { 

    $alias = drupal_get_path_alias($_GET['q']); 
    if ($alias != $_GET['q']) { 
     $template_filename = 'page'; 
     foreach (explode('/', $alias) as $path_part) { 
      $template_filename = $template_filename . '-' . $path_part; 
      $vars['template_files'][] = $template_filename; 
     } 
    } 
    //---- 

//print_r(arg()); 

/* print '<pre>'; 
    print_r($vars); 
    print '</pre>';*/ 

    //dpm($vars); 
    //print_r($vars['template_files']); 

} 
Questions connexes