Я нашел пару способов обработки рекурсии в 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>
Я начинаю понимать, что это может быть очень индивидуальной проблемой, поэтому я полагаю, что просто напишу умный плагин, чтобы справиться с этим конкретно, хотя я бы предпочел всеобъемлющее решение
Есть ли способ?