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


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

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


Вы пробовали просмотреть это? 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

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


Спасибо. Но у меня есть другой сценарий. Я хочу использовать другой режим просмотра для узлов с одинаковым типом контента. Я хочу изменить режим просмотра таксономии, которую я использовал в узле. Я имею в виду, что узлы будут иметь одинаковые шаблоны URL.
октября
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.