4

我想知道是否可以使用 Smarty 2 执行类似于 for 循环的操作。

我想要这样的东西:

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

如果有的话,我应该使用什么功能?

4

3 回答 3

6

按照smarty 文档中的描述尝试 {section}

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

于 2011-04-16T18:05:48.690 回答
4

你可以使用 PHP 的range函数:

<select>
    {foreach item=i from=1950|@range:2000}
        <option value="{$i}">{$i}</option>
    {/foreach}
</select>
于 2013-10-18T00:21:21.367 回答
3

这是一个老问题,已经有一个公认的答案,但答案基本上只是一个链接。我已将此作为更完整的答案发布,以避免未来的访问者不得不搜索文档以找到相关示例。


Smarty 2中,循环是使用{section}标签实现的,它涵盖了相当广泛的用例。要编写等效的 PHPfor()循环,使用以下语法:

<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>
于 2019-06-20T13:01:53.917 回答