특정보기 모드에 템플릿을 제공하는 방법은 무엇입니까?


46

템플릿으로 검색 결과보기 모드를 테마로하고 싶습니다.

템플릿 파일 노드 (article--search-result.tpl.php)의 이름을 지정하면 트릭을 수행 할 수 있다고 생각했지만 분명히 틀 렸습니다.

node-article.tpl.php 할 수 있다는 것을 알고이 검사 $ view_mode 내에서 템플릿을 작성하고 싶지 않은 다른 모든보기 모드에서는 어색합니다.

아이디어?

답변:


45

노드 전처리 기능에 테마 후크 제안을 추가하면 트릭을 수행해야합니다.

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

캐시를 지우고 나면 템플릿 파일 이름으로 node--article--search-result.tpl.php를 사용할 수 있습니다.

NB. MYTHEME_preprocess_node()대신 함수 를 호출하여 테마의 template.php 파일 에서이 작업을 수행 할 수도 있습니다 .


2
훌륭한! 감사합니다. : 여기 같은 조언에 대한 링크를 추가하고 있었다 mearra.com/blogs/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
문제 없음 :) 단지 참고로, search_result이미보기 모드로 선언되어 있으므로 hook_entity_info_alter()귀하의 경우에는 구현할 필요가 없습니다
Clive

3

엔티티보기 모드의 모듈은 자동으로 이러한 템플릿 제안을 추가

Drupal 7의 후속 빌드 모드 에서는 관리자가 엔티티에 대한 사용자 정의보기 모드를 정의 할 수 있습니다. 사용자 지정 엔티티는 hook_entity_info_alter ()를 통해 엔티티 레지스트리에 추가되므로 entity_get_info ()를 사용하여 엔티티의보기 모드 목록을 제공하는 모든 코드에서 사용할 수 있습니다. 여기에는 노드 및 사용자 참조 필드,보기 등이 포함됩니다.


2

다음은 새 기능을 동적으로 추가 할 수있는 기능입니다. 선언 된 해당 전처리 함수도 호출합니다.

그런 다음 전화 drush cache-clear theme-registry를 걸어 작동 시키십시오.

사용하려면 테마를 테마 이름으로 바꾸고 테마 template.php 파일에 넣으십시오.

예를 들어 Droid라는 테마의 경우이를 호출합니다 droid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.