Como alterar o modo de exibição programaticamente?

11

Quero alterar o modo de exibição do nó programaticamente. Eu usei hook_preprocess_node(&$vars)e configurei o modo de exibição:

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

Mas isso não está funcionando como esperado. Estou faltando alguma coisa aqui?

cissharp
fonte
Você tentou revisar isso? drupal.org/node/1334206
chrisjlee

Respostas:

13

Alterar o modo de visualização na função de pré-processo está atrasando muito.
A maneira correta de alterar o módulo de visualização está a implementar hook_entity_view_mode_alter () , que é chamado antes que o conteúdo entidade é processado. Por exemplo, em node_view () , esse gancho é invocado a partir de node_build_content () , que é a primeira função chamada from 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
fonte
4
Obrigado. Por favor, note que este gancho requer drupal> = 7,17
cissharp
6

Se você precisar apenas alterá-lo para determinadas páginas, sugiro Página do modo de exibição . É bastante útil e simples de usar.

kyletaylored
fonte
Obrigado. Mas eu tenho um cenário diferente. Quero usar o modo de exibição diferente para nós com o mesmo tipo de conteúdo. Quero alterar o modo de exibição na taxonomia que usei no nó. Quero dizer que os nós terão os mesmos padrões de URL.
Cissharp