Je tiens à rendre un arbre avec une profondeur indéterminée (enfants de enfants de enfants, etc...). J'ai besoin d'une boucle sur le tableau de manière récursive, comment puis-je faire dans Twig?
En ce qui concerne, Ron
Je tiens à rendre un arbre avec une profondeur indéterminée (enfants de enfants de enfants, etc...). J'ai besoin d'une boucle sur le tableau de manière récursive, comment puis-je faire dans Twig?
En ce qui concerne, Ron
Grâce domi27, j'ai joué un peu avec votre idée et est venu avec cette. J'ai fait un tableau imbriqué comme mon arbre, ['link']['sublinks'] est null ou un autre tableau de la même chose.
Modèles
Le sous-modèle de fichier de répéter avec:
<!--includes/menu-links.html-->
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{% include "includes/menu-links.html" with {'links': link.sublinks} %}
</ul>
{% endif %}
</li>
{% endfor %}
Puis dans le template principal appeler cela (un peu redondant avec " trucs là):
<ul class="main-menu">
{% include "includes/menu-links.html" with {'links':links} only %}
</ul>
Les Macros
Un effet similaire peut être obtenu avec des macros:
<!--macros/menu-macros.html-->
{% macro menu_links(links) %}
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{{ _self.menu_links(link.sublinks) }}
</ul>
{% endif %}
</li>
{% endfor %}
{% endmacro %}
Dans le template principal ce faire:
{% import "macros/menu-macros.html" as macros %}
<ul class="main-menu">
{{ macros.menu_links(links) }}
</ul>
Espérons que cela aide :)
Si vous souhaitez utiliser une Macro dans le même modèle , vous devriez utiliser quelque chose comme cela pour rester compatible avec Twig 2.x:
{% macro menu_links(links) %}
{% import _self as macros %}
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{{ macros.menu_links(link.sublinks) }}
</ul>
{% endif %}
</li>
{% endfor %}
{% endmacro %}
{% import _self as macros %}
<ul class="main-menu">
{{ macros.menu_links(links) }}
</ul>
Cela s'étend random-coder
's réponse et intègre dr.scre
s'allusion à la brindille de la documentation à propos des macros maintenant utiliser _self
mais importer localement.
J'ai d'abord pensé, cela peut être résolu en simple - mais il n'est pas facile.
Vous avez besoin pour créer une logique, peut-être avec une classe php méthode, l'inclusion d'un rameau de tête, et quand ne pas.
<!-- tpl.html.twig -->
<ul>
{% for key, item in menu %}
{# pseudo twig code #}
{% if item|hassubitem %}
{% include "subitem.html.tpl" %}
{% else %}
<li>{{ item }}</li>
{% endif %}
{% endfor %}
</ul>
Donc, vous pourriez utiliser le rameau variable de boucle , qui est disponible à l'intérieur d'une brindille pour la boucle. Mais je ne suis pas sûr au sujet de la portée de cette boucle variable.
Désolé pour fournir une approche non pas une solution, mais peut-être j'espère que mes pensées peuvent vous aider (un peu).
Ceci et d'autres informations sont disponibles sur les Rameaux "pour" Docu !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.