Je souhaite modifier le mode d'affichage du nœud par programmation. J'ai utilisé hook_preprocess_node(&$vars)
et défini le mode d'affichage:
function moduleName_preprocess_node(&$vars) {
// if conditions to apply particular view mode
$vars['view_mode'] = 'teaser';
$vars['elements']['#view_mode'] = 'teaser';
}
Mais cela ne fonctionne pas comme prévu. Est-ce que j'ai râté quelque chose?
Modifier le mode d'affichage dans la fonction de prétraitement le fait trop tard.
La manière correcte de modifier le module de vue implémente hook_entity_view_mode_alter () , qui est appelée avant le rendu du contenu de l'entité. Par exemple, dans node_view () , ce hook est appelé depuis node_build_content () , qui est la première fonction appelée depuis node_view()
.
if (!isset($langcode)) {
$langcode = $GLOBALS['language_content']->language;
}
// Populate $node->content with a render() array.
node_build_content($node, $view_mode, $langcode);
Si vous avez juste besoin de le changer pour certaines pages, je vous suggère Page Mode d'affichage . C'est assez pratique et simple à utiliser.