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