Справедливо, но по сравнению с выполнением рекурсии с одноразовой функцией, умное решение будет запутанным.

ел несколько способов справиться с рекурсией в Smarty, в основном основанных на включении шаблонов в себя, что кажется нелепой тратой ресурсов. Я нашел одно решение от Messju в Smarty, которое, казалось бы, было правильным - но оно не поддерживается и не работает в последней версии smarty :(

Для людей, которые спрашивают: «Я хочу, чтобы smarty печатал» - это дискуссионная ветка, которая определяется массивом записей. Если у записи есть один или несколько ответов, они указываются как дочерние по отношению к указанной записи в массиве и т. Д.

array(
    array(
        'id'=>0,
        'headline'=>"My parent headline",
        'body'    =>"My parent body",
        'children'=>array(
            array(
                'id'=>1,
                'headline'=>"My firstChild headline",
                'body'    =>"My firstChild body",
                'children'=>array()
            ),
            array(
                'id'=>2,
                'headline'=>"My secondChild headline",
                'body'    =>"My secondChild body",
                'children'=>array()
            )
        )
    ),
);

Вложенный массив имеет произвольную глубину, и каждая запись будет иметь произвольное количество дочерних элементов. Для меня это то, что я хочу сделать в рамках шаблона, так как считаю это чистой логикой отображения. Я не хочу обрабатывать HTML или некоторые типы HTML-заполнителей за пределами шаблона.

Я хочу, чтобы Smarty печатал это как вложенные списки:

<ul>
    <li>
        <h1>My parent headline</h1>
        <p>My parent body</p>
        <ul>
            <li>
                <h1>My firstChild headline</h1>
                <p>My firstChild body</p>
            </li>
            <li>
                <h1>My secondChild headline</h1>
                <p>My secondChild body</p>
            </li>
        </ul>
    </li>
</ul>

Я начинаю понимать, что это может быть очень индивидуальной проблемой, поэтому я полагаю, что просто напишу умный плагин, чтобы справиться с этим конкретно, хотя я бы предпочел всеобъемлющее решение.

Есть ли способ?

Ответы на вопрос(4)

Ваш ответ на вопрос