4

各フォルダーに親がある自己結合テーブルがあり、この深さは無制限です。あるフォルダは、親として別のフォルダを持つことができ、深さの制限はありません。

今日、私のコードは次のようになります。各ステップをハードコーディングせずに、必要なだけ深く掘り下げる方法を探しています。おそらく、各ラウンドでそれ自体を呼び出すループを使用して小枝関数を定義する方法があります。ループの中?

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

2 に答える 2

9

再帰的にそれ自体を含む個別のファイルレンダリングオプションが必要です。

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

私はこのコードをここに書いたので、それが正しいとは思わないでください、しかしそれはあなたにアイデアを与えるのに十分なはずです。

于 2012-09-25T13:22:03.313 に答える
0

これは、再帰を使用して実行する必要があります。小枝でテストしたことはありませんが、テンプレートを再帰的に含めるメカニズムを開発できます。

したがって、現在のテンプレートは、特定の条件に達するまでループ内に含まれます。したがって、内部ループにある種のif句が必要です。

幸運を ;)

于 2012-09-25T13:17:41.793 に答える