与父母,子女,孙子一起递归解析分层Twig布局

时间:2015-04-30 11:00:21

标签: symfony macros twig hierarchy

在我的SF2项目中,我有一个实体(类别),我以层次结构的格式表示,父母位于顶部,其次是子女,孙子等。

Category实体有一个getChildren方法,可以工作并返回Category个实体对象。

我正试图找到一种方法来使这种布局更具动态性,而不必在模板中明确设置childrengrandchildren变量。

有更好的方法吗?

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

1 个答案:

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

然后您可以使用相同的表示法来调用它