web-dev-qa-db-fra.com

Thème des champs de lien, obtention de la valeur URL

À partir d'un niveau de modèle de champ, comment puis-je obtenir la valeur de l'URL du champ de lien afin que je puisse thème cette chose? Voici mon modèle de champ remplacé pour ce champ:

{% 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 %}

Il ne contient que deux valeurs possibles.

J'ai essayé toutes les manières possibles d'accéder à la valeur du champ, mais rien ne semble fonctionner.

3
Kevin

Si vous souhaitez faire le thème du champ de lien à partir d'un champ twig level, il peut être préférable de conserver l'élément de rendu de lien existant, qui se trouve dans item.content et ajoutez-y les classes bootstrap:

champ - 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 %}

Vous devez obtenir item.content au niveau supérieur du tableau, afin que vous puissiez fusionner #attibutes. C'est pourquoi vous avez besoin de {% set content = item.content %}.

2
4k4

Ok ... j'ai trouvé ma réponse.

Il y a deux façons de procéder. Dans un sens, se trouve dans le fichier 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();
    }
  }
}

Une autre façon (préférable) que j'ai utilisée est d'utiliser la fonction render_var twig.

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