So rendern Sie das Absatzmodul im Zweig

8

Ich erstelle eine benutzerdefinierte Vorlage für mein Thema und erstelle eine page.html.twig-Seite. Ich möchte die einzelnen Knotenfelder in separate Zeilen aufrufen. Ich konnte alles außer dem Absatzfeld erfolgreich anzeigen.

Ich habe versucht.

{{ node.field_benefits }}
{{ node.field_benefits.value }}
{{ paragraph.field_benefits }}
{{ paragraph.field_benefits.value }}
{{ node.paragraphs.field_benefits }}

Und nichts hat funktioniert. Hat jemand eine Idee von der richtigen Struktur, die im Absatzmodul aufgerufen werden soll?

Oder würde eine für Funktion funktionieren

{% if node.field_benefits %}
{% for field_items in node.field_benefits %}
{{ field_item.value }}
{% endfor %}
{% endif %}
Megan McGowan
quelle
page.html.twig behandelt keine Knoten ... nur die gesamte Seitenvorlage. Sie verwenden die falsche Vorlage. Ich schlage vor, dass Sie stattdessen die Knotenvorlage überschreiben (oder zumindest nachlesen, wie auf Zweigvorlagen zugegriffen wird). Wenn Sie das Twig-Debug aktivieren und den Quellcode anzeigen, können Sie außerdem feststellen, welche Vorlage Sie überschreiben sollten.
NikLP
Ok @NikLP Ich habe alles auf die Knotenebene verschoben, aber ich kann das Absatzmodul immer noch nicht rendern - ich verwende das Feld, das ich durch Debuggen und Kint erhalten habe, und es zeigt immer noch eine leere Zeile
Megan McGowan
Vielleicht das mal ausprobieren? drupal.org/node/2444893
NikLP

Antworten:

7

Fügen Sie zunächst ein paragraph--your_paragraph_machine_name.html.twigzum Vorlagenverzeichnis Ihres Themas hinzu.

Der Zugriff auf Ihre Absatzfelder kann durch Hinzufügen von Zweigvariablen in einem ähnlichen Format erfolgen {{ content.field_your_field }}.

Wenn Sie nur den Feldwert möchten, ist das etwas schwieriger. Wenn Sie beispielsweise ein Listenfeld (Textfeld) hatten und den Wert aus der ausgewählten Option abrufen möchten, können Sie Folgendes tun:

{% for item in content.field_select_list %}
  {% if item is iterable %}
    {% for key,value in item %}
      {% if not value is iterable %}
        {% if key == '#markup' %}
          {{ value }}
        {% endif %}
      {% endif %}
    {% endfor %}
  {% endif %}
{% endfor %}

Sie können jederzeit a ausführen {{ dump(content) }}, um die Struktur anzuzeigen und die gesuchten Werte abzurufen. Hoffe das hilft!

EDIT: Sie können alle albernen verschachtelten Schleifen vermeiden. Das obige Beispiel sollte wie folgt geschrieben sein:

{% set value = content.field_select_list.0['#markup'] %}
{{ value }}

Für ein Textfeld (normal) könnte es ungefähr so ​​aussehen:

{{ content.field_text.0['#context'].value }}

Um einen URL-Wert aus einem Link-Feld zu erhalten, habe ich folgende Vorschläge gesehen:

{{ content.field_link['#items'].0.value.uri }}

Aber es hätte ein "internes: /" Präfix, also hatte ich mit so etwas mehr Glück:

{{ content.field_link.0['#title'] %}
Jimafisk
quelle
Sie können paragraph.field_my_text.valuein jeder Absatzvorlage den einfachen, nicht formatierten Wert ausgeben, genau wie node.field_my_text.valuein einer Knotenvorlage.
Philipp Michael
Wie drucken Sie Absatz - Ihr_Parameter_Maschinenname.html.twig aus Ihrer Hauptvorlage?
Sam