Как программно изменить режим просмотра?

11

Я хочу программно изменить режим просмотра узла. Я использовал hook_preprocess_node(&$vars)и установил режим просмотра:

function moduleName_preprocess_node(&$vars) {
      // if conditions to apply particular view mode
      $vars['view_mode'] = 'teaser';
      $vars['elements']['#view_mode'] = 'teaser';
}

Но это не работает, как ожидалось. Я что-то здесь упускаю?

cissharp
источник
Вы пробовали просмотреть это? drupal.org/node/1334206
chrisjlee

Ответы:

13

Изменение режима просмотра в функции предварительной обработки делает это слишком поздно.
Правильный способ изменить модуль представления - реализовать hook_entity_view_mode_alter () , который вызывается до визуализации содержимого объекта. Например, в node_view () этот хук вызывается из node_build_content () , который является первой вызванной функцией node_view().

  if (!isset($langcode)) {
    $langcode = $GLOBALS['language_content']->language;
  }

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);
киамлалуно
источник
4
Спасибо. Обратите внимание, что для этого хука требуется drupal> = 7.17
cissharp
6

Если вам нужно просто изменить его для определенных страниц, я бы предложил страницу просмотра в режиме просмотра . Это довольно удобно и просто в использовании.

kyletaylored
источник
Спасибо. Но у меня есть другой сценарий. Я хочу использовать другой режим просмотра для узлов с одинаковым типом контента. Я хочу изменить режим просмотра таксономии, которую я использовал в узле. Я имею в виду, что узлы будут иметь одинаковые шаблоны URL.
октября