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.
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;
}
}
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 ';
}