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


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
ありがとうございました。このフックには7.17以上のdrupalが必要であることに注意してください
cissharp

6

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


ありがとうございました。しかし、私には別のシナリオがあります。同じコンテンツタイプのノードに異なる表示モードを使用したい。ノードで使用した分類法の表示モードを変更したい。つまり、ノードは同じURLパターンを持つことになります。
cissharp 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.