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?

cissharp
źródło
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);
kiamlaluno
źródło
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.

kyletaylored
źródło
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