W Drupal 7 często używam node_view()
do renderowania węzłów (przy użyciu trybów widoku) w blokach lub stronach w następujący sposób:
$nids = array(123,456,789);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
$node_view = node_view($node, 'teaser');
$output .= drupal_render($node_view);
}
$build['nodes']['#markup'] = $output;
return $build;
node_view()
/ entity_view()
został uznany za przestarzały i zastąpiony przez konstruktor widoków, jak wyjaśniono w rekordzie zmian Encje są teraz renderowane przez konstruktor widoków . Informacje te nie są wystarczająco szczegółowe, aby móc dowiedzieć się, jak osiągnąć ten sam wynik.
Jak renderować węzły w Drupal 8, aby dane wyjściowe mogły być użyte w tablicy renderowania bloku lub strony?
$node = Node::load($nid)
?render()
z ostatniej linii?getViewBuilder($entity_type)->view
zwraca tablicę renderującą, która zostanie przekazana do widoku gałązki.renderRoot
lubrenderPlain
, lub poprzezdrupal_render_root($build);
Najważniejsze jest, aby przestać się renderować. Możesz zwrócić tablice renderowania prawie wszędzie i powinieneś to zrobić. Łączenie takich ciągów razem nie działa.
Wszystko czego potrzebujesz to:
źródło
entity_view()
zostaną usunięte przed Drupal 9.0.0. Możesz użyć go w Drupal 8, ale jeśli chcesz teraz pisać, że kod (dla tej części) nie zmieni się w Drupal 9, możesz zamiast tego użyć następującego koduentity_view()
.Zasadniczo taki kod został użyty
entity_view()
po zastąpieniu odwołania do innej nieaktualnej metody używanej przez tę funkcję. W rzeczywistości dokumentacjaDrupal::entityManager()
mówi:Jeśli
entity_view()
zostanie zmieniony przed wycofaniem, nadal możesz odwiedzić jego stronę dokumentacji, aby zobaczyć rzeczywisty (i zaktualizowany) kod używany przez funkcję.źródło
Drupal::entityTypeManager()
terazDrupal::entityManager()
przestarzałe?