Come modificare la modalità di visualizzazione a livello di codice?


11

Voglio cambiare la modalità di visualizzazione del nodo a livello di codice. Ho usato hook_preprocess_node(&$vars)e impostato la modalità di visualizzazione:

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

Ma questo non funziona come previsto. Mi sto perdendo qualcosa qui?


Hai provato a recensire questo? drupal.org/node/1334206
chrisjlee

Risposte:


13

La modifica della modalità di visualizzazione nella funzione di preelaborazione lo sta facendo troppo tardi.
Il modo corretto di modificare il modulo di visualizzazione è l'implementazione di hook_entity_view_mode_alter () , che viene chiamato prima del rendering del contenuto dell'entità. Ad esempio, in node_view () , quell'hook viene invocato da node_build_content () , che è la prima funzione chiamata da node_view().

  if (!isset($langcode)) {
    $langcode = $GLOBALS['language_content']->language;
  }

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);

4
Grazie. Nota che questo hook richiede drupal> = 7,17
cissharp

6

Se hai solo bisogno di cambiarlo per determinate pagine, ti suggerirei di visualizzare la pagina della modalità . È abbastanza maneggevole e semplice da usare.


Grazie. Ma ho uno scenario diverso. Voglio utilizzare modalità di visualizzazione diverse per nodi con lo stesso tipo di contenuto. Voglio modificare la modalità di visualizzazione sulla tassonomia che ho usato nel nodo. Voglio dire, i nodi avranno gli stessi pattern URL.
Cissharp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.