web-dev-qa-db-fra.com

Comment imprimer des paragraphes dans le modèle twig

J'ai un type de contenu, basique, où j'ai ajouté un champ Paragraphe (field_pr) qui a deux champs: field_text, field_color. J'ai un twig node node - basic - full.html.twig où je veux imprimer la valeur du champ de paragraphe (node.field_pr) car il peut y avoir plus d'une valeur. Le nombre de paragraphe qui peut être ajouté est limité à 10, alors pensez à node.field_pr ayant jusqu'à 10 valeurs.

Lorsque j'imprime le tableau pour content.field_pr, j'obtiens un tableau énorme, mais je ne veux que les valeurs de field_pr.field_text et field_pr.field_color. Comment pourrais-je faire cela à partir du modèle de nœud twig? Je ne suis pas en mesure de le faire.

J'ai essayé ce qui suit mais je n'arrive pas à accéder aux valeurs. Qu'est-ce que je rate?

{% for field in content.field_pr %}
   {{ field[loop.index0].entity.field_text.value }}
   {{ field[loop.index0].entity.field_color.value }}
{% endfor %}

{% for field in content.field_pr %}
   {{ field[loop.index0]['#paragraph'].field_text.value }}
   {{ field[loop.index0]['#paragraph'].field_color.value }}
{% endfor %}

Voici une image du tableau qui est imprimée pour le champ node.field_pr. enter image description here

6
usernameabc

Je ne sais pas si c'est possible avec votre approche actuelle. Voici comment j'aborderais cela.

Dans votre fichier de modèle de noeud, faites simplement un {{ content.field_pr }}

Créez un fichier modèle pour votre paragraphe.

paragraphe __ [mode_vue] (par exemple, paragraphe - default.html.twig)

paragraphe __ [type] (par exemple paragraphe - image.html.twig)

paragraphe __ [type] __ [mode_vue] (par exemple paragraphe - image - default.html.twig)

source: Theming in Paragraphs for Drupal 8

Dans le paragraphe - [type] .html.twig vous faites {{ content.field_text }} et {{ content.field_color }}

6
No Sssweat

J'ai compris celui-ci. Avec Twig Tweak activé, vous pouvez imprimer des paragraphes à partir de l'objet nœud sans utiliser de contenu:

{% for item in node.field_my_paragraph_field %}
     {{ drupal_entity('paragraph', item.target_id) }}
{% endfor %}
2
user33560

Pour imprimer des champs de paragraphe dans une boucle (pour les curseurs, etc.) dans page--content-type.html.twig utilisez l'extrait ci-dessous:

{% for item in node.field_paragraph_mac_name %}
  {{ item.entity.field_title.value }}
  <img src="{{ file_url(item.entity.field_image.entity.fileuri) }}" />
{% endfor %}
2
Hashmat

S'appuyant sur la réponse de user33560. Si vous avez des paragraphes imbriqués et que vous souhaitez imprimer ou obtenir les champs de paragraphe de deuxième niveau à partir du premier niveau paragraph.html.twig:

{% set paragraph_name = content.field_paragraph_name %}

{% for item in paragraph_name['#items'] %}
    {{ drupal_entity('paragraph', item.target_id) }}
{% endfor %}

Vous pouvez également utiliser {{ content.field_paragraph_name }} Pour imprimer tous les éléments de paragraphe ou imprimer un sous-ensemble tel que {{ content.field_paragraph_name.field_example }}. Utilisez {{ content.field_paragraph_name|without('field_example') }} pour supprimer temporairement l'impression d'un élément enfant donné.

2
AdamB