Was ist die beste Methode, um zu überprüfen, ob ein Feld in einer Knotenvorlage leer ist?
In node - example.html.twig können wir die Variable "content" verwenden.
Ich kann check nicht dazu verwenden, einen Block zu überprüfen
{% if content.field_example %}
Ich kann so etwas benutzen:
{% if content.field_example['#object'] is defined %}
Aber was ist die beste Methode?
Antworten:
Wie ich auch in Wie können Sie Felder aus einer Entitätsreferenz in Knotenvorlagen rendern? [Drupal 8] , Inhalt ist ein Render-Array, das Daten enthält, die zur Anzeige vorbereitet wurden.
Wenn Sie etwas überprüfen oder vergleichen möchten, verwenden Sie stattdessen die Werte, die für das Knotenobjekt verfügbar sind.
{% if node.field_example.value %}
.Beachten Sie, dass die Eigenschaft vom Feldtyp abhängt. Wenn es sich um ein Referenzfeld handelt, müssen Sie stattdessen target_id verwenden. Die Frage, auf die verwiesen wird, verweist auf ein Entitätsfeld-API-Spickzettel, in dem die gängigen Feldtypen und ihre Eigenschaften aufgelistet sind.
quelle
Sie können nicht sicher sein, wie das Render-Array innerhalb des Inhalts aufgebaut ist, daher ist dies nicht die beste Methode.
Dies könnte eine bessere Lösung sein:
Hiermit wird überprüft, ob beim Rendern des Felds eine Ausgabe generiert wird.
Dies hängt jedoch davon ab, wie Sie das Feldformat konfiguriert haben und was Sie versuchen. Beispielsweise könnten Sie so konfiguriert haben, dass eine Beschriftung angezeigt wird, wenn das Feld leer ist. Dann müssen Sie dies anpassen. Wenn Sie nicht auf die gerenderte Ausgabe angewiesen sind und nur prüfen möchten, ob das Feld einen Wert in der Datenbank enthält, verwenden Sie das Knotenobjekt. Siehe Berdir's Antwort.
quelle
|render
ist nicht genug, da zufällige Whitespace-Probleme in Feldvorlagen auftreten. Siehe diesen Link: Das Prüfen auf leere Felder inÜberprüfen Sie, ob das Feld in der Vorlage " Twig templating ( Field Collection )" nicht leer ist : field-collection-item - field-services.html.twig
Installieren Sie das Field Twig Value Module , um den Wert mit " | field_value " abzurufen , gefolgt von " is not empty ".
quelle
Diese Lösung ist ziemlich kugelsicher und funktioniert sogar in wiederverwendbaren und / oder freigegebenen Vorlagen (z. B. einer
node--teaser.html.twig
Freigabe über mehrere Bundles hinweg), weilDas Doppel-Negativ
not ...isEmpty == true
ist notwendig, da sonst ein nicht vorhandenes Feld die Prüfung nicht bestehen würde. Ich glaube auch, dass meine Lösung viel schneller und fehlerresistenter ist als jede Überprüfung, bei der das Feld gerendert wird.Dies sollte für jede Entität Vorlage arbeiten, zB Sie einfach ersetzen können
node.field_xxx
mitparagraph.field_xxx
in einerparagraph.html.twig
Vorlagendateiquelle