我發現了幾種方法來處理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