it-swarm.com.de

Mehrwertiges Feld mit Twig und seiner Länge

Ich spiele mit Twig und D8. Ich habe einen Inhaltstyp namens community erstellt und er enthält ein Feld namens field_banner_images, Das ein Bildfeld mit einer max Limit von 10 Bildern.

Ich versuche, die Länge von field_banner_images Über Twig zu ermitteln, aber die Nummer, die ich erhalte, ist falsch. Mein aktueller Knoten enthält 10 Bilder. Es ist auch Alternativtext aktiviert, wenn dies einen Unterschied macht.

Ich habe eine Datei namens node--community.html.twig Erstellt und darin habe ich:

{{ content.field_banner_images|length }}

welches 26 ausgibt, was falsch ist. Ich würde erwarten, dass es 10 ausgibt.

Außerdem füge ich hinzu

{% for item in content.field_banner_images %}
  <span class="banner-img">{{ content.field_banner_images[loop.index0] }}</span>
{% endfor %}

und während es die 10 Bilder ausgibt, die in span-Elemente eingeschlossen sind, erhalte ich auch 16 leere span-Elemente, da es 26-mal wiederholt wird.

Was mache ich hier falsch?

5
Ronnie

Zählen in Seiten- oder Knotenvorlagen

content ist das Render-Array der Felder, das gemäß dem von Ihnen konfigurierten Ansichtsmodus erstellt wird. Das Render-Array enthält viele zusätzliche Elemente, die keine Feldelemente sind.

Wenn Sie die Elemente in dem Feld in der Datenbank zählen möchten, verwenden Sie das Objekt node:

In PHP:

$node->field_banner_images->count();

Im Zweig:

count() steht nicht auf der Whitelist der zulässigen Methoden. Verwenden Sie stattdessen .getvalue (), um das vollständige Feldarray abzurufen und die Array-Schlüssel mit der Filterlänge zu zählen:

{{ node.field_banner_images.getvalue|length }}

Bessere Lösung mit Feldvorlage

Sie müssen die Schleife jedoch nicht selbst in der Knotenvorlage codieren, sondern können den Wrapper im Feldzweig hinzufügen.

Fügen Sie das vollständige Feld in die Knotenvorlage ein:

{{ content.field_banner_images }}

Und dann legen Sie die Hülle ein:

field - field-banner-images.html.twig

{% for item in items %}
    <span>{{ item.content }}</span>
{% endfor %}

Sie können den Inhalt des Feldes twig) entfernen und durch den obigen Code ersetzen. Sie kennen den Inhalt dieses Feldes und benötigen die div-Container nicht, wenn Sie span möchten.

4
4k4

Zu Ihrer Information

Das funktioniert nicht.

{{ node.field_banner_images.count }}

Stattdessen können Sie so etwas tun:

{{ node.field_banner_images|length }}
0
pbonnefoi