it-swarm.com.de

Wie erhalte ich die Beschriftungswerte für Listenfelder in Twig?

Ich versuche, die Bezeichnung der Liste abzurufen und in der Vorlage twig) anzuzeigen.

Verwenden von node.field_list.value gibt den Schlüsselwert aus. Ich habe versucht, node.field_list.label aber es wird leer zurückgegeben. Ich habe versucht, node.field_list.title, node.field_list.0.label oder node.field_list[0]['#markup'] aber es wird immer noch leer in der Vorlage twig) zurückgegeben

3
clestcruz

Es gibt einige Möglichkeiten:

Es ruft die zulässigen Werte der Liste auf und speichert sie in der Feldkonfiguration.

Wenn die Feldkardinalität 1 ist

<div>
  {% set list_value = node.filter_list.value %}
  {{ node.filter_list.getSetting('allowed_values')[list_value] }}
</div>

Wenn die Feldkardinalität mehr als 1 beträgt

<div>
  {% set allowed_values = node.filter_list.getSetting('allowed_values') %}
  {% set list_values = node.filter_list.getValue() %}
  {% for list_value in list_values %}
    <div>
      {{ allowed_values[list_value['value']] }}
    </div>
  {% endfor %}
</div>

Wenn Ihre Vorlage node.html.twig ist, können Sie sie basierend auf dem Feldformatierer in Ihrem Ansichtsmodus rendern.

<div>
  {{ content.filter_list }}
</div>
4
Alex Kuzava

So konnte ich die Bezeichnung einer Single Choice-Textliste in einer benutzerdefinierten Entität anzeigen, auf die auf einem Knoten mit einem EntityReference-Feld verwiesen wird:

{% for entity_ref_item in node.field_my_entity_ref_field %}
  {% set my_choice_key = entity_ref_item.entity.field_my_list_field.value %}
  {% set my_choice_label = entity_ref_item.entity.field_my_list_field.getSettings('allowed_values')['allowed_values'][my_choice_key] %}
  <div>{{ my_choice_label }}</div>
{% endfor %}

Ich glaube, dass in Alex Kuzavas Code möglicherweise ein Array fehlte ['allow_values']

{{ node.filter_list.getSetting('allowed_values')[list_value] }}

könnte sein müssen

{{ node.filter_list.getSetting('allowed_values')['allowed_values'][list_value] }}

stattdessen. Natürlich können Sie devel kint () verwenden

{{ kint(node.filter_list.getSetting('allowed_values'))}}

So fand ich heraus, dass es noch eine Array-Ebene gab, bevor ich zum Label kam. Aber vielleicht war meine Situation anders, weil ich auf eine benutzerdefinierte Entität zugreife ...

2

Sie können das Modul Zweigfeldwert verwenden, um bei dieser Aufgabe zu helfen. Einmal installiert den Code:

{{ content.field_list|field_label }}

sollte das Etikett anzeigen. Die Art und Weise, wie das Etikett gespeichert wird und auf die zugegriffen wird, wird von der Kardinalität des Felds nicht beeinflusst.

2