プログラムでノードの表示モードを変更したい。私は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';
}
しかし、これは期待どおりに機能していません。ここで何か不足していますか?
前処理機能の表示モードを変更するのは遅すぎます。
ビューモジュールを変更する正しい方法は、エンティティコンテンツがレンダリングされる前に呼び出される 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);
特定のページで単に変更する必要がある場合は、 ビューモードページ をお勧めします。それはかなり便利で使いやすいです。