Ich versuche, eine Ansicht in einen bestimmten Knoten einzubetten. Ich habe Tutorials dafür mit Drupal 7 und PHP-Templates gefunden:
<?php print views_embed_view('view_name'); ?>
Aber ich suche in Drupal 8 einen Weg mit Zweig-Templates. Ich habe versucht, die views_embed_view()
Funktion in aufzurufen hook_node_view()
und sie dem Knoten zuzuweisen, damit ich sie im Zweig-Template ausdrucken kann. Aber es scheint, dass dieser Haken nie aufgerufen wird.
Irgendwelche Tipps / Lösungen, wie man das mit Drupal 8 macht?
So hat es bei mir im Drupal 8 Beta 12-Unterthema von Classy funktioniert.
In der Datei your_theme.info.theme
Ich habe die node.html.twig kopiert und die Artikel-Tags (oder den Bereich, den Sie ersetzen möchten) mit einem Zweigblock umgeben. Ich habe dies im Ordner / template / content abgelegt.
Dann habe ich einen Knoten - 2.html.twig (ersetze 2 durch den gewünschten Knoten) im Ordner / template / content mit dem folgenden Code erstellt.
quelle
Das erste Problem, mit dem Sie zu kämpfen haben, besteht darin, dass gerenderte Entitäten wie Knoten jetzt standardmäßig zwischengespeichert werden, sodass hook_node_view () nur einmal aufgerufen wird, nachdem der Cache dieses Knotens geleert / gespeichert wurde.
Dies ist jedoch ziemlich einfach zu deaktivieren, siehe settings.local.php.
Dann ist die Ausgabe einer Ansicht in $ build ziemlich einfach und funktioniert mehr oder weniger wie in 7.x. Verwenden Sie statt der Einbettungsfunktion $ views = Views :: getView () und dann $ views-> buildRenderable ().
Zwei Tipps:
quelle
settings.local.php
und alle Caches gelöscht. Aber mein Hook-themename_node_view()
In wirdthemename.theme
immer noch nicht angerufen. Haben Sie eine Idee, warum dies der Fall sein könnte?Da Berdir auf View-> buildRenderable anspielt, suchen Sie nach etwas mehr Kontext in einem Modul.
Dann können Sie in Ihrer Seitenvorlage mit darauf zugreifen
quelle
Innerhalb von Ansichten können Sie einen Block mit Ihren relevanten Daten erstellen.
Nach der Blockerstellung können Sie den Block so zuweisen, dass er in Ihrem gewünschten Inhaltsbereich (Fußzeile / Kopfzeile / Inhalt / usw.) angezeigt wird. Weisen Sie es zu und klicken Sie dann auf "Konfigurieren". Sie sollten in der Lage sein, "Block auf bestimmten Seiten anzeigen". Wenn Sie "Nur die aufgelisteten Seiten" auswählen und der Seitenspezifikation / node / your-node-number hinzufügen, sollte diese Ansicht / dieser Block nur mit dem gewünschten Knoten angezeigt werden.
Prost!
quelle
views_embed_view()
Ansatz ist viel einfacher und sauberer, denke ich.Ich weiß, dass Sie erwähnen, dass Sie Zweigvorlagen verwenden möchten, aber Sie können das Modul " Ansichten - Referenzfeld" verwenden , um zu vermeiden, dass Sie in Vorlagen herumwühlen müssen. Es bietet außerdem den Vorteil, dass es zu jeder feldfähigen Entität hinzugefügt werden kann, sodass Inhaltseditoren die Ansicht / Ausgabe konfigurieren können.
quelle