Ich habe ein Listenfeld für einen benutzerdefinierten Blocktyp, der wie folgt aussieht:
left|Align left
right|Align right
Ich kann auf den Schlüssel in Twig zugreifen, indem ich Folgendes mache:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
Wenn ich jedoch einen einfachen Vergleich vornehme, wird er ausgegeben FALSE
.
{{ kint(content.field_align == 'right') }}
Der folgende Code wird zurückgegeben TRUE
.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
Gibt es eine kürzere Version, um die "echte" Saite zu bekommen, damit ich Twigs-Saitenfilter verwenden und sie sauber halten kann?
Antworten:
content
enthält die Render-Arrays basierend auf den konfigurierten Formatierern.Wenn Sie auf die tatsächlichen Werte zugreifen möchten, möchten Sie über das Entitätsobjekt darauf zugreifen. In der Regel ist dies beispielsweise bereits für Ihre Vorlage verfügbar
node
. Für Ihren Fall ist dies etwas Besonderes, da der block_content im Blockinhalt ohne eigene Vorlage gerendert wird, sodass Sie ihn folgendermaßen selbst zur Verfügung stellen müssenyourtheme_preprocess_block($variables)
:Dann können Sie mit auf einen Feldwert zugreifen
block_content.field_name.property
. Also in deinem Fallblock_content.field_align.value
. Die Eigenschaft giltvalue
für die meisten Feldtypen. Für Verweise können Sie sie entwedertarget_id
für die ID oderentity
für das Entitätsobjekt verwenden, auf das verwiesen wird. Ja, Sie können direkt auf Felder zugreifen, aber stellen Sie sicher, dass immer ein Verweis vorhanden ist. Andernfalls können schwerwiegende Fehler oder Ausnahmen auftreten. Um beispielsweise auf die Bezeichnung einer Termreferenz zuzugreifen, können Sie darauf zugreifen alsblock_content.field_tags.entity.name.value
.Wenn Sie das Feld Delta 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
und so weiter verwenden. Sie können sie auch in einer Schleife durchlaufen.Dies alles ordnet PHP direkt zu, was Sie auch
$block_content->field_tags->entity->name->value
an Preprocess- und anderen Stellen tun können, an denen Sie den block_content haben.quelle
block_content.field_name.value
Danke, dass du mir geholfen hast zu verstehen!Hier ist eine alternative Methode, mit der Sie ein Render-Array rendern und dessen Wert überprüfen können (Sie können die Variable so prüfen, als würden Sie sie drucken, da beim Drucken in Drupal 8 Twig automatisch Variablen gerendert werden, die Render-Arrays sind):
Oder eine andere Option, um das zusätzliche Rendering zu speichern, wenn Sie die Variable später drucken:
quelle
In diesem Fall können Sie das Twig Field Value- Modul verwenden. Es ermöglicht das Abrufen von Teildaten von Feldrender-Arrays. Zum Beispiel. content.field_name | field_value -get Feldwert. Sie können es in der IF-Anweisung verwenden
quelle