Próbuję wyrenderować szablon w Drupal 8. W Drupal 7 stworzyłbym szablon z hook_theme, utworzyłem katalog szablonów w moim module, upuściłem plik szablonu i mogłem wyświetlić go za pomocą theme (). Jak zrobić ekwiwalent za pomocą Drupala 8? Próbowałem następujące, ale błędy:
W twitter_pull.module
/ ** * Implementuje hook_theme (). * / funkcja twitter_pull_theme ($ istniejący, $ typ, $ motyw, $ ścieżka) { zwracana tablica ( 'twitter_pull_tweet_listing' => tablica ( „zmienne” => tablica ( „description” => array (), ), „template” => „templates / twitter_pull_tweet_listing”, ), ); }
Wewnątrz twitter_pull / templates: twitter_pull_tweet_listing.html.twig
Wewnątrz mojego bloku:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params); $ output = drupal_render ($ tweet_template, array ('params' => $ params); wydrukuj $ wyjście;
W moich logach pojawia się następujący błąd:
Błąd użytkownika: „treść” jest niepoprawnym kluczem tablicy renderowania w Drupal \ Core \ Render \ Element :: children () (wiersz 89 C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).
EDYCJA: Kolejny błąd:
Twig_Error_Loader: Nie można znaleźć szablonu „moduły / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig” (sprawdzono w: C: \ xampp \ htdocs \ drupal). w Twig_Loader_Filesystem-> findTemplate () (wiersz 202 C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).
Wyobrażam sobie, że ten błąd występuje, ponieważ nie używam przestrzeni nazw i automatycznego ładowania. Gdzie mogę umieścić plik szablonu? Na podstawie komunikatu o błędzie próbowałem nawet umieścić go w C: \ xampp \ htdocs \ drupal \ templates \, ale nadal nie działał.
drupal_render()
? Oczekuje wartości logicznejtemplates/templates/
Część 2 w komunikacie błędu kojarzy mi się należy spróbować'template' => 'twitter_pull_tweet_listing',
zamiast'template' => 'templates/twitter_pull_tweet_listing',
whook_theme()
Odpowiedzi:
Ogólnie w Drupal 8 powinieneś pominąć linię szablonu i nazwać szablon tak samo jak hak, konwertując podkreślenia na myślniki. Zostało to zmienione, ponieważ szablony są domyślnym formatem wyjściowym dla motywów wyjściowych w D8. W twoim przypadku to
hook_theme()
:… Wskazuje na szablon w
templates/twitter-pull-tweet-listing.html.twig
. (To używa składni krótkiej tablicy ).Odpowiedni zapis zmian: https://www.drupal.org/node/2231673
A także z bloku lub kontrolera proszę zwrócić tablicę renderującą zamiast łańcucha. W ten sposób można później manipulować wynikami, a nieprzetworzone dane są nadal dostępne wzdłuż linii. Innymi słowy, w
drupal_render()
miarę możliwości unikaj dzwonienia z kodu. Dotyczy to również Drupal 7: https://www.drupal.org/node/930760#creatingWięc z twojego bloku:
źródło