如何在smarty的单循环中进行这种模板化?

时间:2010-10-27 09:30:23

标签: smarty

<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>

如果不使用smarty,上面的html可以通过 1 循环生成:

$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;

但是当需要聪明时,我不知道该怎么做。

4 个答案:

答案 0 :(得分: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>

但正如其他人已经写过的那样,我没有看到这样做的重点,因为你的解决方案看起来更清晰。

答案 1 :(得分:0)

据我所知,这不能在Smarty中完成,因为Smarty无法在PHP中缓冲内容。

但是,我不明白为什么这是必要的。对我来说,它似乎是不必要的(并且令人困惑)代码化妆品。

答案 2 :(得分: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>

答案 3 :(得分:0)

除非你获得显着的速度提升,否则我建议将它留在2个循环中,这样就更容易阅读。

如果没有,你可以使用smarty中的{php}标签来执行原始php(不知道它们是否默认实现)。