Lors de l'impression d'un champ de texte, nous voulons simplement afficher la valeur. Lorsqu'il est imprimé tel quel dans un modèle twig ({{ content.field_subtitle }}
) nous obtenons la sortie suivante.
Actuellement, nous essayons de ne pas utiliser le |raw
filtre donc nous utilisons simplement {{ content.field_subtitle|render|striptags }}
.
Existe-t-il des alternatives à cette approche sans avoir à créer un autre modèle twig pour le champ? Nous avons du mal à trouver une alternative.
Installer:
node--page.html.twig
Configuration actuelle dans le modèle twig
<div class="myclass__subtitle>
{{ content.field_subtitle|render|striptags }}
</div>
Sortie courant:
<div class="myclass__subtitle">
<div class="field field--name-field-subtitle field--type-string field--label-hidden field__item">Intrinsicly harness interactive functionalities.</div>
</div>
Sortie désirée:
<div class="myclass__subtitle">
Intrinsicly harness interactive functionalities
</div>
Je suis farouchement contre des choses comme render-array|render|striptags
etc. Cela semble très peu naturel et non Drupal. Ce que vous devez faire est de créer un modèle de champ sans balisage.
Par exemple, soit dans field.html.twig
qui affecterait tous les champs, ou dans field--field-name.html.twig
ou des variantes plus spécifiques, vous pouvez le faire:
{#
/**
* @file
* Theme override to remove all field markup.
*/
#}
{% spaceless %}
{% for item in items %}
{{ item.content }}
{% endfor %}
{% endspaceless %}
Cela rendra toujours ce champ sans balisage.
Pour un champ à valeur unique, je fais souvent ceci: {{ content.field_subtitle.0 }}
. Cela n'imprime que le premier delta, y compris le balisage que le champ lui-même inclut (par exemple, fonctionne bien également sur les champs de référence ou d'autres choses plus complexes) mais n'utilise pas du tout le modèle de champ.