在我的SF2项目中,我有一个实体(类别),我以层次结构的格式表示,父母位于顶部,其次是子女,孙子等。
Category实体有一个getChildren
方法,可以工作并返回Category
个实体对象。
我正试图找到一种方法来使这种布局更具动态性,而不必在模板中明确设置children
和grandchildren
变量。
有更好的方法吗?
<ul class="sortable">
{% for cat in cats %}
{% set children = cat.getChildren %}
<li id="menuItem_{{ cat.id }}">
<div data-id="{{ cat.id }}">
<span>{{ cat.name }}</span>
</div>
{% for child in children %}
{% set grandchildren = child.getChildren %}
<ul>
<li id="menuItem_{{ child.id }}">
<div data-id="{{ child.id }}">
{{ child.name }}
</div>
{% for grandchild in grandchildren %}
<ul>
<li id="menuItem_{{ grandchild.id }}">
<div data-id="{{ grandchild.id }}">
{{ grandchild.name }}
</div>
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
</li>
{% endfor %}
</ul>
答案 0 :(得分:2)
所以你想要实现的是对树枝中的树进行递归解析吗?
如果是这样,请查看macros
。
{% import _self as macros %}
{% macro showChild(object) %}
{% import _self as macros %}
<ul>
{% for child in object.children %}
{{ macros.showChild(child) }}
{% endfor %}
<li id="menuItem_{{ object.id }}">
<div data-id="{{ object.id }}">
{{ object.name }}
</div>
</li>
</ul>
{% endmacro %}
<ul class="sortable">
{% for cat in cats %}
{{ macros.showChild(cat) }}
{% endfor %}
</ul>
这就是全部:)
如果您需要帮助,请告诉我
编辑1:
如果要在另一个文件中使用该宏,请删除“import _self”行,然后在另一个文件中使用别名将其导入:
index.html.twig:
{% import 'macro_file_name.html.twig' as macros %}
然后您可以使用相同的表示法来调用它