web-dev-qa-db-ja.com

プログラムで表示モードを変更するにはどうすればよいですか?

プログラムでノードの表示モードを変更したい。私は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';
}

しかし、これは期待どおりに機能していません。ここで何か不足していますか?

11
cissharp

前処理機能の表示モードを変更するのは遅すぎます。
ビューモジュールを変更する正しい方法は、エンティティコンテンツがレンダリングされる前に呼び出される hook_entity_view_mode_alter() を実装することです。たとえば、 node_view() では、そのフックはnode_view()から呼び出される最初の関数である node_build_content() から呼び出されます。

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

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);
13
kiamlaluno

特定のページで単に変更する必要がある場合は、 ビューモードページ をお勧めします。それはかなり便利で使いやすいです。

6
kyletaylored