how español array menu twig

menu - español - twig include



Menú de niveles múltiples con TWIG (1)

Para generar un menú simple, puedo hacer:

<ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul>

y entonces:

{% embed ''...'' with { items: [''Home'', ''Articles''] %}

Pero, ¿cómo tengo que escribir el código TWIG, si quiero crear menús profundos sin fin como:

<ul> <li>Alpha</li> <li>Bravo</li> <ul> <li>Charlie</li> <li>Delta</li> <li>Echo</li> <ul> <li>Foxtrott</li> </ul> <li>Golf</ul> </ul> <li>Hotel</li> <li>India</li> </ul>

Thx por ayuda!


Para llevar a cabo la recursión en twig , puede hacer uso de macro''s

{% import _self as macro %} {{ macro.multilevel(foo) }} {% macro multilevel(array) %} {% import _self as macro %} <ul> {% for item in array %} <li> {% if item is iterable %} {{ macro.multilevel(item) }} {% else %} {{ item }} {% endif %} </li> {% endfor %} </ul> {% endmacro %}

twigfiddle

EDITAR Con una matriz simple no es posible anidar niños en el mismo <li> que el padre. Por lo tanto, tendrías que cambiar tu arreglo alrededor,

Matriz reformada

$data = [ ''links'' => [ [ ''title'' => ''alpha'', ''href'' => ''http://www.alpha.com'', ''children'' => [], ], [ ''title'' => ''beta'', ''href'' => ''http://www.beta.com'', ''children'' => [ [ ''title'' => ''charlie'', ''href'' => ''http://www.charlie.com'', ''children'' => [], ], [ ''title'' => ''delta'', ''href'' => ''http://www.delta.com'', ''children'' => [], ], [ ''title'' => ''echo'', ''href'' => ''http://www.echo.com'', ''children'' => [ [ ''title'' => ''foxtrot'', ''href'' => ''http://www.foxtrot.com'', ''children'' => [], ], ], ], ], ], ] ];

tiwg

{% macro menu(links) %} {% import _self as macro %} <ul> {% for link in links %} <li> <a href="{{ link[''href''] }}">{{ link[''title''] }}</a> {% if not link[''children'']|default([]) is empty %} {{ macro.menu(link[''children'']) }} {% endif %} </li> {% endfor %} </ul> {% endmacro %}

twigfiddle