Reemplazar html.tpl.php por tipo de nodo

17

En mi archivo template.php para mi tema, he intentado lo siguiente:

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

Esto funciona para la página - nodetype.tpl.php, pero no para html - nodetype.tpl.php

Quizás se pregunte por qué necesita anular la plantilla html.tpl.php por tipo de nodo. Es porque hay un marcado que no quiero incluir para este nodo en particular.

Chris Muench
fuente

Respuestas:

28

El nombre de una función de preproceso se basa en el tema / plantilla que se está procesando. Para preprocesar el archivo html.tpl.php, deberá usar hook_preprocess_html():

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

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

El enfoque @Clive es muy inteligente.

También tenga en cuenta que cuando esté en el archivo html.tpl.php, puede leer el tipo de contenido del que está tratando $variables['classes'], lo que le dará algo comohtml not-front not-logged-in no-sidebars page-node page-node- page-node-5638 node-type-CONTENT-TYPE-NAME

Con eso, puede cambiar cómo se comporta el archivo html.tpl.php con esto:

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