我发现了几种方法来处理Smarty中的递归,主要基于将模板包含到自身中,这看起来像是荒谬的资源浪费。我发现了一个解决方案,通过Messju了在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占位符以外的占位符模板。
我想智者打印此嵌套的列表:
<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>
我开始意识到这可能是一个非常逐案的问题,所以我想我会只写一个智者插件来处理这个具体问题,尽管我宁愿有一个全面的解决方案。
有没有办法?
想想这样,应用程序需要显示一个任意嵌套的东西列表。那里有复杂性。你需要管理复杂性。在模板中放置基本显示逻辑(循环遍历数组并放出标记)是有意义的。只是递归不会使它变得邪恶。 – GloryFish 2009-03-16 20:58:46
不够公平,但与使用一次性函数进行递归相比,聪明的解决方案会变得复杂。 – 2009-03-17 04:17:40