web-dev-qa-db-fra.com

Comment changer le mode d'affichage par programmation?

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?

11
cissharp

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);
13
kiamlaluno

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.

6
kyletaylored