Як надати шаблон для конкретного режиму перегляду?


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. Ви також можете це зробити у файлі template.php теми, натиснувши MYTHEME_preprocess_node()натомість функцію .


2
Блискуче! Дякую. Якраз
збирався

1
Без проблем :) Просто FYI, search_resultвже оголошено як режим перегляду, тому вам не потрібно реалізовувати hook_entity_info_alter()у вашому випадку
Clive

3

Режими перегляду Entity модуль додає ці пропозиції шаблону автоматично

Наступник Drupal 7 для побудови режимів, що дозволить адміністраторам визначати власні режими перегляду для сутностей. Спеціальні особи додаються до реєстру сутностей за допомогою ho_entity_info_alter (), тому вони доступні для будь-якого коду, який використовує entit_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);
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.