¿Cómo cambiar el modo de vista mediante programación?

11

Quiero cambiar el modo de vista del nodo mediante programación. Usé hook_preprocess_node(&$vars)y configuré el modo de vista:

function moduleName_preprocess_node(&$vars) {
      // if conditions to apply particular view mode
      $vars['view_mode'] = 'teaser';
      $vars['elements']['#view_mode'] = 'teaser';
}

Pero esto no está funcionando como se esperaba. ¿Me estoy perdiendo de algo?

cissharp
fuente
¿Intentaste revisar esto? drupal.org/node/1334206
chrisjlee

Respuestas:

13

La alteración del modo de vista en la función de preproceso lo hace demasiado tarde.
La forma correcta de alterar el módulo de vista es implementar hook_entity_view_mode_alter () , que se llama antes de que se represente el contenido de la entidad. Por ejemplo, en node_view () , ese gancho se invoca desde node_build_content () , que es la primera función llamada desde 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
fuente
44
Gracias. Tenga en cuenta que este gancho requiere drupal> = 7.17
cissharp
6

Si necesita cambiarlo para ciertas páginas, le sugiero que vea la página del modo de visualización . Es bastante práctico y fácil de usar.

kyletaylored
fuente
Gracias. Pero tengo un escenario diferente. Quiero usar un modo de vista diferente para nodos con el mismo tipo de contenido. Quiero alterar el modo de vista en la taxonomía que utilicé en el nodo. Quiero decir que los nodos tendrán los mismos patrones de URL.
cissharp