Próbuję osadzić widok w określonym węźle. Znalazłem tutoriale do robienia tego za pomocą szablonów Drupal 7 i PHP:
<?php print views_embed_view('view_name'); ?>
Ale szukam sposobu w Drupal 8 z szablonami gałązek. Próbowałem wywołać views_embed_view()
funkcję w hook_node_view()
i przypisać ją do węzła, aby wydrukować ją w szablonie gałązki. Ale wygląda na to, że ten hak nigdy nie zostanie wywołany.
Wszelkie wskazówki / rozwiązania, jak to zrobić w Drupal 8?
Tak to działało w pod-temacie Drupal 8 beta 12 Classy.
W pliku your_theme.info.theme
Skopiowałem plik node.html.twig i otoczyłem tagi artykułu (lub obszar, który chcesz zastąpić) blokiem gałązki. Umieściłem to w folderze / template / content.
Następnie utworzyłem węzeł - 2.html.twig (zamień 2 na żądany węzeł) w folderze / template / content z następującym kodem.
źródło
Pierwszym problemem, z którym walczysz, jest to, że renderowane jednostki, takie jak węzły, są teraz domyślnie buforowane, więc hook_node_view () jest wywoływany tylko raz po wyczyszczeniu pamięci podręcznej / zapisaniu tego węzła.
Jest to jednak dość łatwe do wyłączenia, patrz settings.local.php.
Następnie umieszczenie wyjścia widoku w $ build jest dość łatwe i mniej więcej działa jak w 7.x. Zamiast korzystać z funkcji osadzania, rozważ użycie $ views = Views :: getView (), a następnie $ views-> buildRenderable ()
Dwie wskazówki:
źródło
settings.local.php
i wyczyściłem wszystkie pamięci podręczne. Ale mój hakthemename_node_view()
wthemename.theme
dalszym ciągu nie jest wywoływana. Czy masz pojęcie, dlaczego tak może być?Ponieważ Berdir nawiązywał do widoku-> buildRenderable, właśnie tego szukasz, ale aby dać więcej kontekstu w module, musisz wykonać następujące czynności.
Następnie w szablonie strony możesz uzyskać do niego dostęp za pomocą
źródło
W widokach możesz utworzyć blok z odpowiednimi danymi.
Po utworzeniu bloku możesz przypisać blok, aby pojawił się w żądanym obszarze zawartości (stopka / nagłówek / treść / itp.). Przypisz go, a następnie kliknij „konfiguruj”. Powinieneś być w stanie „Pokazać blok na określonych stronach”. Wybranie opcji „Tylko wymienione strony” i dodanie / node / your-node-number do specyfikacji strony powinno ograniczyć ten widok / blok do wyświetlania tylko z wybranym węzłem.
Twoje zdrowie!
źródło
views_embed_view()
podejście jest chyba znacznie łatwiejsze i czystsze.Wiem, że wspomniałeś, że chcesz używać szablonów gałązek, ale możesz użyć modułu Widoki Odniesienia , aby uniknąć konieczności przeszukiwania szablonów. Daje również tę zaletę, że można go dodać do dowolnego obiektu z możliwością zmiany pola, dzięki czemu redaktorzy treści mogą skonfigurować widok / wynik.
źródło