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


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

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