web-dev-qa-db-fra.com

Remplacez html.tpl.php par type de nœud

Dans mon fichier template.php pour mon thème, j'ai essayé ce qui suit:

function media_preprocess_page(&$vars, $hook) {
  if (isset($vars['node'])) 
  {
      // If the node type is "blog" the template suggestion will be "html--blog.tpl.php".
       $vars['theme_hook_suggestions'][] = 'html__'.$vars['node']->type;

      // If the node type is "blog" the template suggestion will be "page--blog.tpl.php".
       $vars['theme_hook_suggestions'][] = 'page__'.$vars['node']->type;

      // If the node id is "33" the template suggestion will be "page--33.tpl.php".
       $vars['theme_hook_suggestions'][] = 'page__'.$vars['node']->nid;    
  }

    //Create page suggestion for first part of url-alias
    $url_alias = drupal_get_path_alias($_GET['q']);
    $parts = explode('/', $url_alias);

    $vars['theme_hook_suggestions'][] = 'page__'.$parts[0].'__alias';  
}

Cela fonctionne pour page - nodetype.tpl.php, mais pas pour html - nodetype.tpl.php

Vous vous demandez peut-être pourquoi vous devez remplacer le modèle html.tpl.php par type de nœud. C'est parce qu'il y a du balisage que je ne veux pas inclure pour ce nœud particulier.

16
Chris Muench

Le nom d'une fonction de prétraitement est basé sur le thème/modèle en cours de traitement. Pour prétraiter le fichier html.tpl.php, vous devez utiliser hook_preprocess_html():

function media_preprocess_html(&$vars) {
  $node = menu_get_object();

  if ($node && $node->nid) {
    $vars['theme_hook_suggestions'][] = 'html__' . $node->type;
  }
}
29
Clive

L'approche @Clive est très intelligente.

Notez également que dans le fichier html.tpl.php, vous pouvez lire le type de contenu que vous traitez à partir de $variables['classes'], ce qui vous donnera quelque chose comme html not-front not-logged-in no-sidebars page-node page-node- page-node-5638 node-type-CONTENT-TYPE-NAME

Avec cela, vous pouvez changer le comportement du fichier html.tpl.php avec ceci:

if (strpos($variables['classes'],'node-type-YOUR-CONTENT-TYPE') == true ) {
  echo 'Do something special  for YOUR-CONTENT-TYPE ';
}
4
augusto