it-swarm.com.de

Theming-Linkfelder, URL-Wert abrufen

Wie kann ich auf Feldvorlagenebene den URL-Wert des Linkfelds abrufen, um dieses Thema zu thematisieren? Hier ist meine überschriebene Feldvorlage für dieses Feld:

{% for item in items %}
    {%
      set classes = [
        'btn',
        (loop.index0 == 0) ? 'btn--primary' : 'btn--inverted'
      ]
    %}

    <a href="{{ item.content['#uri'] }}" class="{{ classes|join(' ') }}">{{ item.content['#title'] }}</a>
{% endfor %}

Es enthält nur zwei mögliche Werte.

Ich habe alle Möglichkeiten ausprobiert, um auf den Feldwert zuzugreifen, aber nichts scheint zu funktionieren.

3
Kevin

Wenn Sie das Theming des Linkfelds von einem Feld aus ausführen möchten twig), ist es möglicherweise besser, das vorhandene Link-Rendering-Element beizubehalten, das sich in item.content Und befindet Fügen Sie die Klassen bootstrap) hinzu:

field - link.html.twig

{#
/**
 * @file
 * Theme override for a field.
 *
 * Add bootstrap button style to a link field
 */
#}
{% for item in items %}
  {%
    set link_classes = [
      'btn',
      (loop.index0 == 0) ? 'btn--primary' : 'btn--inverted'
    ]
  %}
  {% set content = item.content %}
  {% set content = content|merge({ '#attributes': { class: link_classes } }) %}
  {{ content }}
{% endfor %}

Sie müssen item.content Auf der obersten Ebene des Arrays erhalten, damit Sie #attibutes Zusammenführen können. Deshalb brauchen Sie {% set content = item.content %}.

2
4k4

Ok ... habe meine Antwort gefunden.

Es gibt zwei Möglichkeiten, wie Sie dies tun können. Eine Möglichkeit ist in der Datei themename.theme:

function mytheme_preprocess_field(&$variables) {
  if ($variables['element']['#bundle'] == 'motivation_card' && $variables['element']['#field_name'] == 'field_link') {
    foreach ($variables['items'] as $index => $item) {
      $variables['items'][$index]['content']['url'] = $item['content']['#url']->toString();
    }
  }
}

Eine andere (bevorzugte) Methode, die ich verwendet habe, ist die Verwendung der Funktion render_var twig).

{{ render_var(item.content['#url']) }}
1
Kevin