Ich versuche, eine Vorlage in Drupal 8 zu rendern. In Drupal 7 würde ich ein Thema mit hook_theme erstellen, ein Vorlagenverzeichnis in meinem Modul erstellen, die Vorlagendatei ablegen und sie mit theme () anzeigen. Wie mache ich das Gleiche mit Drupal 8? Ich habe folgendes ausprobiert, aber es ist ein Fehler aufgetreten:
In twitter_pull.module
/ ** * Implementiert hook_theme (). * / Funktion twitter_pull_theme ($ existent, $ type, $ theme, $ path) { Array zurückgeben ( 'twitter_pull_tweet_listing' => array ( 'Variablen' => Array ( 'description' => array (), ), 'template' => 'templates / twitter_pull_tweet_listing', ), ); }}
Innerhalb von twitter_pull / templates: die twitter_pull_tweet_listing.html.twig
In meinem Block:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params)); $ output = drupal_render ($ tweet_template, array ('params' => $ params)); print $ output;
Ich erhalte den folgenden Fehler in meinen Protokollen:
Benutzerfehler: "Inhalt" ist ein ungültiger Render-Array-Schlüssel in Drupal \ Core \ Render \ Element :: children () (Zeile 89 von C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).
EDIT: Ein weiterer Fehler:
Twig_Error_Loader: Vorlage "modules / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig" konnte nicht gefunden werden (untersucht: C: \ xampp \ htdocs \ drupal). in Twig_Loader_Filesystem-> findTemplate () (Zeile 202 von C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).
Ich stelle mir vor, dass dieser Fehler auftritt, weil ich keine Namespaces verwende und nicht richtig automatisch lade. Wo lege ich meine Vorlagendatei ab? Aufgrund der Fehlermeldung habe ich sogar versucht, sie unter C: \ xampp \ htdocs \ drupal \ templates \ abzulegen, aber es hat immer noch nicht funktioniert.
drupal_render()
? Es erwartet einen Booleschen Werttemplates/templates/
Teil in der 2. Fehlermeldung lässt mich denken, dass Sie versuchen sollten,'template' => 'twitter_pull_tweet_listing',
anstatt'template' => 'templates/twitter_pull_tweet_listing',
inhook_theme()
Antworten:
Im Allgemeinen sollten Sie in Drupal 8 die Vorlagenzeile weglassen und die Vorlage wie Ihren Hook benennen, um die Unterstriche in Bindestriche umzuwandeln. Dies wurde geändert, da Vorlagen das Standardausgabeformat für die themenbezogene Ausgabe in D8 sind. Also in Ihrem Fall dies
hook_theme()
:… Würde auf eine Vorlage bei verweisen
templates/twitter-pull-tweet-listing.html.twig
. (Das verwendet eine kurze Array-Syntax .)Relevanter Änderungsdatensatz: https://www.drupal.org/node/2231673
Außerdem geben Sie von einem Block oder Controller ein Render-Array anstelle eines Strings zurück. Auf diese Weise können die Ergebnisse anschließend bearbeitet werden und die Rohdaten sind später weiterhin verfügbar. Mit anderen Worten, vermeiden
drupal_render()
Sie es, wann immer möglich von Ihrem Code aus anzurufen. Dies gilt auch für Drupal 7: https://www.drupal.org/node/930760#creatingAlso aus deinem Block:
quelle