J'ai un type de bloc personnalisé avec un champ Lien appelé "field_link" (pour les liens internes uniquement). Dans mon bloc Twig template je veux extraire l'URL du champ de lien. Comment puis-je faire? J'ai lu un article avec des problèmes similaires, mais aucune des solutions ne semble fonctionner jusqu'à présent.
Ce que j'ai essayé jusqu'à présent:
{{ file_url(content.field_link.uri) }}
{{ file_url(content.field_link.0.url) }}
Je reçois seulement "/" mais il devrait y avoir "/ node/1" ...
Voici mon modèle de bloc standard:
<div{{ attributes.addClass(classes) }}>
{{ title_prefix }}
{% if label %}
<h2{{ title_attributes }}>{{ label }}</h2>
{% endif %}
{{ title_suffix }}
{% block content %}
{{ content }}
{% endblock %}
</div>
Je ne suis pas sûr que vous ayez besoin d'utiliser file_url (), mais vous pouvez utiliser {{ content.field_link.0['#url'] }}
comme décrit dans cette question sur stackoverflow.
Ce code fonctionnera correctement pour imprimer des URL et Title séparés du champ de lien dans twig.
{{ content.field_link[0]['#url'] }}
{{ content.field_link[0]['#title'] }}
Vous pouvez obtenir l'URL et la valeur (texte) de cette façon:
{{ content.field_link.0['#url'] }}
{{ content.field_link.0['#title'] }}
Dans la plupart des modèles (nœud, paragraphe, ...), vous pouvez accéder aux valeurs de champ brutes à l'aide de{{ entity_type.field_name.0.value }}
. Malheureusement, cela ne fonctionne pas avec les modèles de blocs. Pour le faire fonctionner pour les blocs de contenu personnalisés, vous devez ajouter une fonction de prétraitement:
function YOURTHEME_preprocess_block(array &$variables) {
if ($variables['base_plugin_id'] == 'block_content') {
$variables['block_content'] = $variables['elements']['content']['#block_content'];
}
}
Vous pouvez maintenant accéder à vos champs à l'aide de {{ block_content.field_name.0.value }}
(en cas de champs de lien, utilisez {{ block_content.field_name.0.url }}
comme décrit ici )