У меня есть таблица для самостоятельного соединения, в которой каждая папка имеет родителя, а глубина – неограниченная. Одна папка может иметь другую папку в качестве родителя, без ограничений на глубину.
Сегодня мой код выглядит так, и я ищу способ выкапывания настолько глубоко, насколько это необходимо, без жесткого кодирования с каждым шагом вниз, может быть, есть способ определить функцию 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 }}'> {{ folder.name }}</option> {% endfor %} {% endfor %} </select>
Вам нужны отдельные опции рендеринга файлов, которые рекурсивно включают в себя:
<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) %} {% endfor %} {{ folder.name }} </option> {% include 'options.html.twig' with {'folders': folder.children, 'level': level + 1} %} {% endfor %}
Я написал этот код прямо здесь, поэтому не ожидайте, что это будет правильно, но этого должно быть достаточно, чтобы дать вам эту идею.
Это нужно сделать с помощью рекурсии . Я никогда не тестировал его с веточкой, но вы могли бы разработать механизм, в котором вы рекурсивно включаете шаблон.
Таким образом, ваш текущий шаблон будет включать себя в цикл до тех пор, пока не будет достигнуто определенное условие. Поэтому в вашем внутреннем цикле вам нужно какое-то предложение if.
Удачи 😉