【问题标题】:Symfony2 Twig unlimited child depthSymfony2 Twig 无限子深度
【发布时间】:2012-09-25 12:41:59
【问题描述】:

我有一个自连接表,其中每个文件夹都有一个父级,并且其深度是无限的。一个文件夹可以有另一个文件夹作为父文件夹,没有深度限制。

今天我的代码看起来像这样,我正在寻找一种方法来尽可能深入地挖掘,而无需对每一步进行硬编码,是否有一种方法可以定义一个带有循环的 twig 函数,它会调用自己在循环中的每一轮?

<select id='parent' name='container'>
    <option value='none'>No parent</option>
        {% for folder in folders %}
            <option value='{{ folder.id }}'>{{ folder.name }}</option>
                {% for folder in folder.children %}
                    <option value='{{ folder.id }}'>&nbsp;&nbsp;&nbsp;{{ folder.name }}</option>    
                {% endfor %}
        {% endfor %}
</select>  

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    你需要一个单独的文件渲染选项,递归地包含自己:

    <select>
        <option value="none">No parent</option>
        {% include 'options.html.twig' with {'folders': folders, 'level': 0} %}
    </select>
    

    options.html.twig:

    {% for folder in folders %}
        <option value="{{ folder.id }}">
            {% for i in range(0, level) %}&nbsp;{% endfor %}
            {{ folder.name }}
        </option>
    
        {% include 'options.html.twig' with {'folders': folder.children, 'level': level + 1} %}
    {% endfor %}
    

    我在这里写了这段代码,所以不要期望它是正确的,但它应该足以给你这个想法。

    【讨论】:

    • 感谢您启动我,我会尝试并返回 yall。
    • 这一切都成功了,你教会了我一项新技术!祝你一切顺利。
    • 有没有办法在这个递归方法中对值求和?我需要对树的每个最深分支中满足条件的每个值求和作为一个总数。有可能吗?
    【解决方案2】:

    这必须使用递归来完成。我从未使用 twig 对其进行过测试,但您可以开发一种机制,以递归方式包含模板。

    因此,您当前的模板会将自身包含在循环中,直到达到特定条件。所以你的内部循环中需要某种 if 子句。

    祝你好运;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多