Wie können Sie Felder aus einer Entitätsreferenz in Knotenvorlagen rendern? [Drupal 8]


9

Für den Kontext habe ich es mit zwei Inhaltstypen zu tun: article und team_profile. In Artikelknoten haben wir ein Entitätsreferenzfeld, in das ein team_profile-Knoten gezogen wird, um als Autoreninformation zu dienen.

Ich würde das Objekt nur mit einem neuen Anzeigemodus rendern, aber bei unserem Design befindet sich das Foto direkt über dem Veröffentlichungsdatum und dem Namen nebeneinander: Screenshot des Autoreninformationsdesigns

In D7 würde ich einen dpm($content)Drilldown zu den Knoteninformationen durchführen, doppelklicken und den Rest des Referenzpfads herausziehen. Ich verwende kint und bin in der Lage, den Inhalt der Entitätsreferenz bis zu einem bestimmten Grad auszuspucken {{ kint(content.field_blog_author[0]['#node']) }}. Die nächste Ebene, auf die ich zugreifen möchte, ist values, aber wenn ich Folgendes versuche, bekomme ich NULL:

  • content.field_blog_author[0]['#node’][‘values’]
  • content.field_blog_author[0]['#node’]=>values
  • content.field_blog_author[0]['#node’]->values

Letztendlich möchte ich die Felder titleund field_team_imagevom referenzierten Knoten rendern ( hier in der Kint-Ausgabe ). Ich habe keine Informationen dazu in der Dokumentation oder durch Suchen gefunden. Würde mir jemand helfen, mich zu lösen?

Antworten:


13

#knoten gibt es eigentlich den aktuellen knoten.

Wenn Sie auf Felder und deren Werte zugreifen möchten, beginnen Sie mit dem Knoten und nicht mit dem Inhalt. Hierbei handelt es sich um ein Render-Array mit den konfigurierten Feldern.

Sie können wie folgt auf die Referenzentität zugreifen {{ node.field_blog_author.entity }}.

Von dort aus können Sie erneut mit dem Feld der referenzierten Entität fortfahren, die Sie anzeigen möchten. Sie können versuchen, die Ansichtsmethode aufzurufen. Mit wird sie mit den Standardeinstellungen angezeigt. Sie können auch einen Ansichtsmodus als Zeichenfolge oder eine Array-Anzeige übergeben (Sie sind sich über die genaue Syntax für diesen in Zweig nicht sicher).

Meine Standardreferenz finden Sie unter http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet. Dort finden Sie einen guten Überblick über Inhaltsentitäten, deren Struktur und den Zugriff auf Werte. Das meiste davon gilt auch für Zweige.

Wenn Sie herausfinden möchten, was sich in einer Inhaltsentität befindet, verwenden Sie node.toArray (), um eine Array-Darstellung zu erhalten, die sehr nahe daran liegt, wie Sie als Objekt darauf zugreifen können. Während die interne Struktur ganz anders ist.


Danke, Berdir. {{ kint(node.field_blog_author.entity) }}gibt zwar ein schönes Array des referenzierten Knotens aus, aber jetzt kann ich nicht tiefer gehen. {{ kint(node.field_blog_author.entity.title) }}Zum Beispiel wird die Seite unterbrochen, und es werden keine Ressourcen oder andere Elemente hinter dem Header-Bereich geladen. Gleiches für nidoder andere. Nur für kichert, versucht die referenzierte Entität im Knoteninhalt mit einschließen {{ node.field_blog_author.entity }}zurück Nachricht eines Fehlers scheinbar von selbst , dass der Knoten nicht in der Vorlage wie das gezeigt werden kann.
Alexbea

Es sieht so aus, als wären dies geschützte Werte . Klingt das richtig? Möglicherweise muss ich einen Ansichtsmodus nur für das Foto erstellen und dann den Anzeigemodus "Beschriftung" für den Namen verwenden.
Alexbea

Ja, sie sind geschützt. Wie gesagt, verwenden Sie toArray (), das auch für node.field_blog_author.entity.title funktioniert. Wenn Sie einen Wert festlegen möchten, benötigen Sie ... entity.title.value. Lesen Sie unbedingt das Spickzettel, auf das verwiesen wird. Es erklärt viele dieser Dinge.
Berdir

1
Ich schätze die Hilfe. Ich verstehe jedoch nicht wirklich, wie ich die Informationen im Spickzettel verwenden soll. Das Hinzufügen .valuehat in diesem Fall funktioniert und beantwortet meine ursprüngliche Frage.
Alexbea

@berdir die Website-URL ist kaputt.
Chalo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.