Wie ändere ich den Ansichtsmodus programmgesteuert?

11

Ich möchte den Ansichtsmodus des Knotens programmgesteuert ändern. Ich habe hook_preprocess_node(&$vars)den Ansichtsmodus verwendet und eingestellt:

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

Dies funktioniert jedoch nicht wie erwartet. Vermisse ich hier etwas?

Cissharp
quelle
Haben Sie versucht, dies zu überprüfen? drupal.org/node/1334206
chrisjlee

Antworten:

13

Das Ändern des Ansichtsmodus in der Vorverarbeitungsfunktion ist zu spät.
Die richtige Methode zum Ändern des Ansichtsmoduls ist die Implementierung von hook_entity_view_mode_alter () , die aufgerufen wird, bevor der Entitätsinhalt gerendert wird. Zum Beispiel in node_view () wird aufgerufen , daß Haken von node_build_content () , die die erste Funktion aufgerufen ist 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
quelle
4
Vielen Dank. Bitte beachten Sie, dass dieser Haken drupal> = 7.17
cissharp
6

Wenn Sie müssen es nur für bestimmte Seiten ändern, würde ich vorschlagen , Anzeigemodus Seite . Es ist ziemlich praktisch und einfach zu bedienen.

kyletaylored
quelle
Vielen Dank. Aber ich habe ein anderes Szenario. Ich möchte einen anderen Ansichtsmodus für Knoten mit demselben Inhaltstyp verwenden. Ich möchte den Ansichtsmodus für die Taxonomie ändern, die ich im Knoten verwendet habe. Ich meine, die Knoten haben die gleichen URL-Muster.
Cissharp