2010-10-27 56 views
0
<ul> 
{foreach from=$recommend item=value} 
<li><span><em>{$value['content']}</em></span></li> 
{/foreach} 
</ul> 
<ul> 
{foreach from=$recommend item=value} 
<li><h4>{$value['name']}</h4></li> 
{/foreach} 
</ul> 

上面的HTML可以通過循環,如果不使用Smarty的產生:如何在smarty中的單循環中做這種模板?

$html1 = $html2 = '<ul>'; 
foreach($recommend as $value) 
{ 
    $html1 .= '<li><span><em>' . $value['content'] . '</em></span></li>'; 
    $html2 .= '<li><h4>' . $value['name'] . '</h4></li>'; 
} 
$html1 .= '</ul>'; 
$html2 .= '</ul>'; 
$html = $html1 . $html2; 

,但我不知道如何做到這一點,需要智者的時候。

+0

男人你是什麼意思? – nerkn 2010-10-27 09:32:53

+0

我的例子需要2個循環來生成最終的html,我想在1個循環內完成。 – smarty 2010-10-27 09:35:52

+0

這是一個簡單的例子,但主要想法是一樣的。 – smarty 2010-10-27 09:48:38

回答

0

據我所知,這不能在Smarty中完成,因爲Smarty無法在PHP中緩衝內容。

但我不明白爲什麼這將是必要的。它看起來像是不必要的(並且令人困惑)代碼化妝品給我。

+0

Smarty可以使用{capture}進行緩衝http://www.smarty.net/manual/en/language.builtin.functions.php#language.function.capture – JochenJung 2010-10-29 08:24:49

0

這裏是我的實際困難,Category1~Category3只能從$recommend

<ul class="sort clearfix"> 
    <li class="curr"><span><em>Category1</em></span></li> 
    <li><span><em>Category2</em></span></li> 
    <li><span><em>Category3</em></span></li> 
</ul> 
<ul class="pic_txt_list clearfix"> 
    {recommend path="1" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
    {recommend path="2" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
    {recommend path="3" limit=3} 
    {foreach from=$recommend item=value} 
    <li> 
     <script type="text/javascript">im_chat_now({$value['userid']},1)</script> 
    </li> 
    {/foreach} 
    {/recommend} 
</ul> 
0

除非你獲得顯著速度提升我建議留在,2個迴路,這樣更容易閱讀。

如果不是你可以使用smarty中的{php}標籤來執行原始的php(不知道它們是否默認實現)。

1

這適用於一個循環:

<ul> 
{foreach from=$recommend item=value} 
    <li><span><em>{$value['content']}</em></span></li> 
    {capture name=list2} 
    <li><h4>{$value['name']}</h4></li> 
    {/capture} 
{/foreach} 
</ul> 
<ul> 
{$smarty.capture.list2} 
</ul> 

但作爲已經寫入了別人,我看不出這樣做的地步,你的解決方案看起來更清晰。

+0

不錯,沒有意識到這一點! +1 – 2010-10-29 08:26:10