Chcę programowo zmienić tryb widoku węzła. Użyłem hook_preprocess_node(&$vars)
i ustawiłem tryb widoku:
function moduleName_preprocess_node(&$vars) {
// if conditions to apply particular view mode
$vars['view_mode'] = 'teaser';
$vars['elements']['#view_mode'] = 'teaser';
}
Ale to nie działa zgodnie z oczekiwaniami. Czy coś mi umyka?
Odpowiedzi:
Zmiana trybu widoku w funkcji wstępnego przetwarzania powoduje, że robi się to zbyt późno.
Poprawnym sposobem modyfikacji modułu widoku jest zaimplementowanie hook_entity_view_mode_alter () , które jest wywoływane przed renderowaniem treści encji. Na przykład w node_view () ten hook jest wywoływany z node_build_content () , która jest pierwszą funkcją wywoływaną z
node_view()
.źródło
Jeśli chcesz to zmienić tylko dla niektórych stron, sugeruję stronę Tryb widoku . Jest dość poręczny i prosty w użyciu.
źródło