Stellen Sie sicher, dass ein Feld nicht leer ist

15

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?

Heiliger
quelle
1
Verwenden Sie hook_preprocess und prüfen Sie programmgesteuert. Fügen Sie möglicherweise eine Indikatorvariable hinzu. Ansonsten was 4k4 geschrieben hat.

Antworten:

20

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.

Berdir
quelle
Für das Bildfeld {% node.field_article_image.target_id%}
Yogesh Kushwaha
13

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:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

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.

4k4
quelle
Ich halte Berdir für richtig, weil es flexibler ist.
Sainf
@ 4k4: Das |renderist nicht genug, da zufällige Whitespace-Probleme in Feldvorlagen auftreten. Siehe diesen Link: Das Prüfen auf leere Felder in
Zweigvorlagen
@MojtabaReyhani: Danke, tolle Entdeckung. Fand dort diesen Link drupal.org/node/2783633#comment-11510195 . Fügte dies dem Code hinzu.
4. 4.
4

Ü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 ".

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 
Alberto Galvis
quelle
1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

Diese Lösung ist ziemlich kugelsicher und funktioniert sogar in wiederverwendbaren und / oder freigegebenen Vorlagen (z. B. einer node--teaser.html.twigFreigabe über mehrere Bundles hinweg), weil

  • Es funktioniert für alle Feldtypen
  • es prüft, ob das Feld existiert
  • es prüft, ob das Feld nicht leer ist
  • Es wird geprüft, ob das Feld im Anzeigemodus nicht ausgeblendet ist

Das Doppel-Negativ not ...isEmpty == trueist 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_xxxmit paragraph.field_xxxin einer paragraph.html.twigVorlagendatei

Hudri
quelle