À 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.
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 %}
.
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']) }}