Created
October 15, 2012 12:23
-
-
Save tentacode/3892186 to your computer and use it in GitHub Desktop.
Twig recursive macro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{% macro recursiveCategory(category) %} | |
<li> | |
<h4><a href="{{ path(category.route, category.routeParams) }}">{{ category }}</a></h4> | |
{% if category.children|length %} | |
<ul> | |
{% for child in category.children %} | |
{{ _self.recursiveCategory(child) }} | |
{% endfor %} | |
</ul> | |
{% endif %} | |
</li> | |
{% endmacro %} | |
{% if categories %} | |
<div id="categories"> | |
<ul> | |
{% for category in categories %} | |
{{ _self.recursiveCategory(category) }} | |
{% endfor %} | |
</ul> | |
</div> | |
{% endif %} |
@ureimers your example gives exception:
Impossible to invoke a method ("recursiveCategory") on a string variable ("...html.twig").
Hi!
How to be with categories duplicates.
I mean if category has been rendered as a child, but it also will be rendered as a root category? So on page will be the two same categories rendered as a child category and as a root category.
Kind regards
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Another solution for this situation is to use the "tree" twig tag: https://github.com/jordanlev/twig-tree-tag -- it's less hacky, works in Twig 1 and 2, and IMO keeps the markup more straightforward (less ceremony around the mechanics of the loop and/or the macro). Only potential problem is that it requires PHP 5.4 or higher (but if you're using Twig v2 then that's no problem because you're already on PHP 5.5 or higher for that).