我在 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>
我开始意识到这可能是一个非常具体的问题,所以我想我会写一个聪明的插件来专门处理这个问题,尽管我宁愿有一个全面的解决方案。
有办法吗?