如何在Smarty中检查迭代?
回答 3
浏览 2.6万
2012-03-05
我怎样才能检查foreach的当前迭代,并做一些事情?
{foreach $new_products as $product name=foo}
{if $smarty.foreach.foo.iteration=5}
Do it!
{/if}
{/foreach}
这总是返回未检查的
{foreach $from as $item} {if $item@iteration == 5}
有点短......
- rodneyrehm 2012-03-05
3 个回答
#1楼
已采纳
得票数 11
我认为你应该做的是{if $smarty.foreach.foo.iteration == 5}
(注意==
)。
为什么是双等号?只是想了解一下,因为===也能正常工作。
- loxyboi 2015-08-13
@loxyboi 你可以使用两个或三个等号(三个等号也会检查,类型是否匹配--见php.net/manual/de/language.types.type-juggling.php)。但是在原来的问题中,只有一个等号,这是错误的。
- apfelbox 2015-08-13
@apfelbox oh yeah I can see that now, didn't spot the one '=' in the question.我以为你指的是Smarty的具体规则。谢谢!
- loxyboi 2015-08-13
#2楼
得票数 6
有一种替代的(我认为是较新的)技术可以做到这一点。来自Smarty docs的例子很好地展示了它:
{foreach $items as $i}
{if $i@index eq 3}
{* put empty table row *}
<tr><td>nbsp;</td></tr>
{/if}
<tr><td>{$i.label}</td></tr>
{/foreach}
注意,索引从零开始,所以索引3是第4次迭代。
#3楼
得票数 4
对于Smarty 3,你可以使用@iteration属性。
{foreach $new_products as $product}
{if $product@iteration == 5}
Do it!
{/if}
{/foreach}