Jak programowo zmienić tryb widoku?


11

Chcę programowo zmienić tryb widoku węzła. Użyłem hook_preprocess_node(&$vars)i ustawiłem tryb widoku:

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

Ale to nie działa zgodnie z oczekiwaniami. Czy coś mi umyka?


Próbowałeś to sprawdzić? drupal.org/node/1334206
chrisjlee

Odpowiedzi:


13

Zmiana trybu widoku w funkcji wstępnego przetwarzania powoduje, że robi się to zbyt późno.
Poprawnym sposobem modyfikacji modułu widoku jest zaimplementowanie hook_entity_view_mode_alter () , które jest wywoływane przed renderowaniem treści encji. Na przykład w node_view () ten hook jest wywoływany z node_build_content () , która jest pierwszą funkcją wywoływaną z 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
Dziękuję Ci. Należy pamiętać, że ten hak wymaga drupal> = 7.17
cissharp

6

Jeśli chcesz to zmienić tylko dla niektórych stron, sugeruję stronę Tryb widoku . Jest dość poręczny i prosty w użyciu.


Dziękuję Ci. Ale mam inny scenariusz. Chcę użyć innego trybu widoku dla węzłów o tym samym typie treści. Chcę zmienić tryb widoku taksonomii, której użyłem w węźle. Mam na myśli, że węzły będą miały te same wzorce adresów URL.
cissharp
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.