Comment puis-je obtenir la valeur du champ brut dans un modèle de brindille?

27

myfield est un champ de texte brut. {{ content.field_myfield }}rend le champ avec le balisage HTML et l'étiquette de champ.

Comment rendre la valeur brute du champ? {{ content.field_myfield.value }}ne fonctionne pas.

Pim
la source

Réponses:

45

{{ entity.field_name.value }} pour obtenir la vraie valeur brute, inclut les balises et l'encodage.

  • Exemple: {{ node.body.value }}
  • résultat: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} pour obtenir la valeur brute moins les balises et l'encodage.

  • Exemple: {{ content.body.0 }}
  • résultat: Batman & Robin

brut

Ce filtre doit être évité autant que possible, en particulier si vous sortez des données qui pourraient être saisies par l'utilisateur. Voir cette page pour plus d'informations sur l'échappement automatique dans Drupal 8.

source: Filtres - Modification des variables dans les modèles Twig

Le filtre brut marque la valeur comme étant "sûre", ce qui signifie que dans un environnement avec l'échappement automatique activé, cette variable ne sera pas échappée si raw est le dernier filtre qui lui est appliqué.

source: documents officiels de Twig


Par exemple, vous pouvez utiliser:

{{ node.body.value|striptags }}
{{ paragraph.field_text.value|striptags }}

Le problème avec l'utilisation des striptags de twig est le double encodage des entités html, pas le balisage, donc & devient & puis & amp; - Berdir

Pas de sueur
la source
6
les exemples de contenu ne sont pas corrects. Voir drupal.stackexchange.com/questions/198694/… . Ce que vous pouvez utiliser est content.field_text.0, puis vous obtenez uniquement la partie intérieure du premier élément de champ, sans les modèles de champ. C'est particulièrement utile pour les listes, les références, etc., où vous voulez la sortie formatée, pas la valeur brute
Berdir
2
Mieux, mais toujours pas tout à fait correct. content.field_myfield | striptags ne fonctionne pas, vous ne pouvez pas y passer un tableau de rendu. Vous auriez besoin de le rendre d'abord, puis de le passer à travers cela. les striptags et ainsi de suite ont également des problèmes avec & et d'autres caractères qui peuvent être encodés deux fois, donc vous avez souvent besoin d'un | striptags | raw en fait.
Berdir
2
Just | raw laisse les balises html et les imprime. Le problème avec | striptags est alors le double encodage des entités html, pas le balisage, donc & devient & amp; puis & amp; amp;
Berdir
2
Ce n'est pas un double échappement, vous pouvez le voir <et >ils s'affichent correctement. L'esperluette est probablement déjà à échappement unique avant de la sortir. Mais la question concerne un champ de texte brut , pas un champ de texte formaté traité par des filtres de texte. (Pour répondre à cette question non posée, la valeur brute (si quelqu'un le veut vraiment) serait toujours présente .valueet elle serait correctement échappée par Twig, pour des raisons de sécurité, car vous ne devriez jamais sortir un champ de texte formaté non filtré)
4k4
2
Oui, c'est ce que je voulais dire (échappement automatique = échappement simple). Ainsi, vos exemples de sortie de valeurs de champ d'entité sont parfaits, uniquement sans le filtre striptag, car cela produirait la sortie moche à double échappement. (BTW la &amp;sortie dans votre exemple est erronée, cela ne se produit pas dans l'échappement automatique à moins que le contenu du champ ne soit déjà échappé une fois).
4k4
5

Vous pouvez utiliser le module Twig Field Value dans ce cas. Après avoir installé ce module, vous aurez accès à des données partielles à partir de tableaux de rendu de champ. Par exemple.

{{ content.field_name|field_value }}
content.field_image|field_target_entity.uri.value

etc. Plus d'infos sur la page des projets

Andrew Kozoriz
la source
1
{{ content.body | raw }} 

obtenir la valeur du champ brut dans un modèle de brindille

Wasim Khan
la source