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 %}
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 %}