web-dev-qa-db-fra.com

Récupère la valeur du champ de l'entité référencée dans la boucle twig

J'ai un type de contenu avec un champ référencé multiple et je dois parcourir chaque élément et afficher les informations sur l'élément dans un tableau, mais je ne sais pas et je n'ai pas trouvé un moyen d'accéder aux informations du champ de contenu comme la valeur d'un domaine spécifique.

Exemple: J'ai un type de contenu appelé Tâche et dans Tâche, j'ai plusieurs références d'entité au type de contenu Worker, Worker a un titre, un nom et un téléphone. Comment puis-je répéter chaque travailleur et afficher les informations dans un tableau?

Ce que je veux faire, c'est remplacer node ​​- task.html.twig pour faire quelque chose comme ceci:

En supposant que nous avons un champ field_workers dans le type de contenu de la tâche.

<table>
   <thead>
     <tr>
       <th>
         Name
       </th>
       <th>
         Phone
       </th>
     </tr>
   </thead>
   <tbody>
    {% for worker in content.field_workers %}
     <tr>
       <td>
        {{worker.field_name.value}}
       </td>
       <td>
         {{worker.field_phone.value}}
       </td>
     </tr>
     {% endfor %}
   </tbody>
</table>

C'est possible? Je vous remercie!

2
Henrique Alho

Vous souhaitez travailler avec le nœud au lieu du contenu.

quelque chose comme ça devrait fonctionner

{% for item in node.field_workers %}
 {{ item.entity.field_name.value }}
{% endfor %}

Voir Entité API Cheat Sheet et mon blogpost pour plus d'informations: http://www.md-systems.ch/en/blog/techblog/2017/02/20/twig-and -entity-field-api-or-how-to-take-control-of-nodehtmltwig

3
Berdir

Comme @Berdir l'explique dans http://www.md-systems.ch/en/blog/techblog/2017/02/20/twig-and-entity-field-api-or-how-to-take -control-of-nodehtmltwig vous avez deux options, utilisez l'entité node (voir la réponse de Berdir) ou le tableau de rendu dans content. Pour l'approche de contenu, vous devez placer la ligne du tableau dans un deuxième modèle de nœud:

nœud - task.html.twig

<table>
   <thead>
     <tr>
       <th>
         Name
       </th>
       <th>
         Phone
       </th>
     </tr>
   </thead>
   <tbody>
     {{ content.field_workers }}
   </tbody>
</table>

nœud - travailleur - table.html.twig

     <tr>
       <td>
         {{ content.field_name }}
       </td>
       <td>
         {{ content.field_phone }}
       </td>
     </tr>

L'inconvénient est évidemment que vous avez besoin de deux modèles. L'avantage est que vous pouvez rendre les champs Worker comme ils sont configurés dans l'interface utilisateur et vous pouvez utiliser des filtres de texte. Utilisez un mode d'affichage séparé table, afin que vous puissiez afficher le type de contenu Worker à d'autres endroits comme d'habitude. Vous devrez peut-être également supprimer le code HTML du field--field-workers.html.twig modèle si cela gêne la structure de la table.

3
4k4