it-swarm.com.de

Wie greife ich in Twig auf Felddaten zu?

Ich habe ein Listenfeld für einen benutzerdefinierten Blocktyp, der folgendermaßen aussieht:

left|Align left
right|Align right

Ich kann auf den Schlüssel in Twig) zugreifen, indem ich so etwas mache:

{% block content %}
  {{ content.field_align }}  {# outputs 'right' #}
{% endblock %}

Wenn ich jedoch einen einfachen Vergleich durchführe, wird FALSE ausgegeben.

{{ kint(content.field_align == 'right') }}

Der folgende Code gibt TRUE zurück.

{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}

Gibt es eine kürzere Version, um die "echte" Zeichenfolge zu erhalten, damit ich Twigs-Zeichenfolgenfilter verwenden und sie aufgeräumt halten kann?

15
estrar

content enthält die Render-Arrays, die auf den konfigurierten Formatierern basieren.

Wenn Sie auf die tatsächlichen Werte zugreifen möchten, möchten Sie über das Entitätsobjekt darauf zugreifen. Normalerweise steht das Ihrer Vorlage bereits zur Verfügung, zum Beispiel node. Für Ihren Fall ist es etwas Besonderes, da der block_content im Blockinhalt ohne eigene Vorlage gerendert wird. Sie müssen ihn also selbst in einer yourtheme_preprocess_block($variables) wie folgt verfügbar machen:

if (isset($variables['elements']['content']['#block_content'])) {
  $variables['block_content'] = $variables['elements']['content']['#block_content'];
}

Anschließend können Sie mit block_content.field_name.property Auf einen Feldwert zugreifen. Also in Ihrem Fall block_content.field_align.value. Die Eigenschaft ist value für die meisten Feldtypen. Für Referenzen können Sie entweder target_id Für die ID oder entity für das referenzierte Entitätsobjekt verwenden. Ja, Sie können direkt auf Felder zugreifen, stellen Sie jedoch immer sicher, dass eine Referenz vorhanden ist, da sonst schwerwiegende Fehler oder Ausnahmen auftreten können. Um beispielsweise auf die Bezeichnung einer Begriffsreferenz zuzugreifen, können Sie als block_content.field_tags.entity.name.value Auf diese zugreifen.

Wenn Sie das Felddelta nicht angeben, wird standardmäßig das erste verwendet. Wenn Sie auf ein anderes Delta zugreifen möchten, können Sie entity.field_name.1.value Usw. verwenden. Sie können sie auch durchlaufen.

Dies alles ist direkt auf PHP abgebildet. Sie können $block_content->field_tags->entity->name->value Auch in Vorprozessen und an anderen Stellen ausführen, an denen Sie den block_content haben.

16
Berdir

Hier ist eine alternative Möglichkeit nur für Vorlagen, mit der Sie ein Render-Array rendern und seinen Wert überprüfen können (ermöglicht das Überprüfen der Variablen, als ob Sie sie drucken würden, da das Drucken in Drupal 8 Twig rendert automatisch Variablen, die Render-Arrays sind):

{{ kint(content.field_align|render == 'right') }}

Oder eine andere Option zum Speichern des zusätzlichen Renderings, wenn Sie die Variable später drucken:

{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}

{{ field_align }}
6
Cottser

In diesem Fall können Sie das Modul Zweigfeldwert verwenden. Es ermöglicht das Abrufen von Teildaten von Feldrender-Arrays. Zum Beispiel. content.field_name | field_value -get Wert des Feldes. Sie können es in der IF-Anweisung verwenden

2
Andrew Kozoriz