在Smarty 2中循环

时间:2011-04-16 17:56:48

标签: smarty

我想知道是否可以使用Smarty 2做类似于for循环的事情。

我想有这样的事情:

<select>
{for $i from 1950 to 2000 }
   <option value="{$i}">{$i}</option>
{/for}
</select>

我应该使用什么功能?

3 个答案:

答案 0 :(得分:5)

按照smarty docs

中的描述尝试{section}

顺便说一下:检查{html_options}功能:html_options docs

答案 1 :(得分:1)

您可以使用PHP的range函数:

<select>
    {foreach item=i from=1950|@range:2000}
        <option value="{$i}">{$i}</option>
    {/foreach}
</select>

答案 2 :(得分:0)

这是一个老问题,已经有一个可接受的答案,但是答案基本上只是一个链接。我将其发布为更完整的答案,以避免将来的访问者不得不搜寻文档来查找相关示例。


Smarty 2 中,使用{section}标签实现了循环,该标签涵盖了广泛的用例。要编写等效于PHP for()循环的代码,请使用以下语法:

<select>
{section name="i" start=1950 loop=2001}
   <option value="{$smarty.section.i.index}">{$smarty.section.i.index}</option>
{/section}
</select>

请注意,loop属性是指Smarty跳出循环的数字,因此它需要比要迭代的最终数字高1。


附录: 尽管这与问题(与Smarty 2有关)没有直接关系,但值得注意的是 Smarty 3 引入了{for}标签,因此您现在可以执行以下操作,即简单得多:

<select>
{for $i=1950 to 2000}
   <option value="{$i}">{$i}</option>
{/for}
</select>