Как предоставить шаблон для определенного режима просмотра?

Я хочу использовать режим просмотра результатов поиска с помощью шаблона.

У меня было в голове, что назначение узла файла шаблона - article - search-result.tpl.php могло бы сделать трюк, но я, очевидно, ошибаюсь.

Я понимаю, что могу сделать node - article.tpl.php и внутри этой проверки $ view_mode, но это неудобно со всеми другими режимами представления, которые я не хочу создавать.

Идеи?

42 голоса | спросил artfulrobot 30 MarpmFri, 30 Mar 2012 20:56:07 +04002012-03-30T20:56:07+04:0008 2012, 20:56:07

3 ответа


43

Добавление предложений о выборе темы в функции препроцессора узла должно сделать трюк:

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().

ответил Clive 30 MarpmFri, 30 Mar 2012 21:04:41 +04002012-03-30T21:04:41+04:0009 2012, 21:04:41
3

модуль просмотра объектов автоматически добавляет эти предложения шаблонов

  

Преемник Drupal 7 Режим сборки , который позволит администраторам определять настраиваемые режимы просмотра для объектов. Пользовательские объекты добавляются в реестр объектов через hook_entity_info_alter (), поэтому они доступны для любого кода, который использует entity_get_info (), чтобы предоставить список режимов просмотра для объекта. Это включает в себя поля ссылок на узлы и пользователя, представления и т. Д.

ответил Bas 27 PM00000050000000631 2014, 17:15:06
2

Вот функция, которая позволяет вам динамически добавлять новые. Он также вызывает соответствующую функцию препроцесса, если у вас есть объявленный.

Затем вызовите drush cache-clear theme-registry, чтобы заставить его работать.

Чтобы использовать его, замените THEME на имя своей темы и поместите его в свой файл temp.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);
  }
}
ответил Elijah Lynn 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 05 Sep 2014 02:37:11 +0400 2014, 02:37:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132