노드 유형별로 html.tpl.php를 재정의


17

내 테마의 template.php 파일에서 다음을 시도했습니다.

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

이것은 page--nodetype.tpl.php에서는 작동하지만 html에서는 작동하지 않습니다.

노드 유형별로 html.tpl.php 템플리트를 대체해야하는 이유를 물을 수 있습니다. 이 특정 노드에 포함하고 싶지 않은 마크 업이 있기 때문입니다.

답변:


28

전처리 기능의 이름은 처리중인 테마 / 템플릿을 기반으로합니다. html.tpl.php 파일을 사전 처리하려면 다음을 사용해야합니다 hook_preprocess_html().

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

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

3

@Clive 접근 방식은 매우 영리합니다.

html.tpl.php 파일에, 당신은 당신이에서 다루고있는 내용 유형 읽을 수있는 경우도 메모를 할 $variables['classes']당신에게 뭔가를 줄 것이다,html not-front not-logged-in no-sidebars page-node page-node- page-node-5638 node-type-CONTENT-TYPE-NAME

이를 통해 html.tpl.php 파일의 동작 방식을 다음과 같이 변경할 수 있습니다.

if (strpos($variables['classes'],'node-type-YOUR-CONTENT-TYPE') == true ) {
  echo 'Do something special  for YOUR-CONTENT-TYPE ';
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.