Comment changer le mode d'affichage par programmation?

11

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?

cissharp
la source
Avez-vous essayé de revoir cela? drupal.org/node/1334206
chrisjlee

Réponses:

13

Modifier le mode d'affichage dans la fonction de prétraitement le fait trop tard.
La façon correcte de modifier le module de vue consiste à implémenter 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);
kiamlaluno
la source
4
Je vous remercie. Veuillez noter que ce crochet nécessite drupal> = 7,17
cissharp
6

Si vous avez juste besoin de le changer pour certaines pages, je suggère la page Mode d'affichage . C'est assez pratique et simple à utiliser.

kyletaylored
la source
Je vous remercie. Mais j'ai un scénario différent. Je souhaite utiliser un mode d'affichage différent pour les nœuds avec le même type de contenu. Je souhaite modifier le mode d'affichage sur la taxonomie que j'ai utilisée dans le nœud. Je veux dire que les nœuds auront les mêmes modèles d'URL.
cissharp