使用 parents、children、grandchildren 递归解析分层 Twig 布局
Recursive parsing of hierarchical Twig layout with parents, children, grandchildren
在我的 SF2 项目中,我有一个实体(类别),我以分层格式表示,顶部是 parent,然后是 children、grandchildren 等.
Category 实体有一个 getChildren
方法,该方法有效 returns Category
实体 objects.
我正在尝试找到一种使此布局更具动态性的方法,而不必在模板中显式设置 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>
那么您要实现的是对树枝中的树进行递归解析,对吗?
如果是这样,看看 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 %}
那你就可以用同样的记法来称呼它了
在我的 SF2 项目中,我有一个实体(类别),我以分层格式表示,顶部是 parent,然后是 children、grandchildren 等.
Category 实体有一个 getChildren
方法,该方法有效 returns Category
实体 objects.
我正在尝试找到一种使此布局更具动态性的方法,而不必在模板中显式设置 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>
那么您要实现的是对树枝中的树进行递归解析,对吗?
如果是这样,看看 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 %}
那你就可以用同样的记法来称呼它了