结构如下:
<!-- projects list -->
{if !empty($userObjects)}
<select id="projects-list" tabindex="1" name="project">
{if !isset($selected)}<option value="0">Choose project</option>{/if}
{foreach from=$userObjects item=v}
<option value="{$v.Id}" {if $selected==$v.Id}selected="selected"{/if} }>{$v.Name}
{* if it's 1st element *}
{if $smarty.foreach.v.index == 0}
{if isset($limit)}<br /><span id="projlimit">{$limit}</span> {$currency->sign}{/if}
{/if}
</option>
{/foreach}
</select>
你可以看到我做了
{if $smarty.foreach.v.index == 0}
但是出了问题。在这种情况下,所有options
元素都有一个$limit值。如何让它变好?我只需要第一个
我不想显得粗鲁,但Bondye的答案并不适用于所有情况。由于PHP的数组是有序映射,所以第一个键的值不会总是为0。
在这些情况下,您可以使用@index
, @iteration
或@first
属性。更多详细信息请参见smarty foreach
文档http://www.smarty.net/docs/en/language.function.foreach.tpl#foreach.property.iteration
你的问题的一个可能的解决方案如下:
{foreach $rows as $row}
{if $row@iteration == 1}
First item in my array
{/if}
{/foreach}
您可以使用以下代码:
{foreach from=$userObjects item=v name=obj}
{if $smarty.foreach.obj.first}
This is the first item
{/if}
{if $smarty.foreach.obj.last}
This is the last item.
{/if}
{/foreach}
可以通过数组键来实现吗?
{foreach from=$rows key=i item=row}
{if $i == 0}
First item in my array
{/if}
{/foreach}
最好的解决方案是定义自定义索引变量并增加它
这是我的工作干净的解决方案:
{assign var="index" value=-1}
{foreach from=$myArrObjects item=arrObject}
{if $index == -1}
{assign var="index" value=$index+1}
<!-- Do whatever you want with the index now :) -->
{/if}
{/foreach}
在Smarty中,您可以使用foreach @first
属性来获取第一个迭代/元素。如果当前{foreach}迭代是初始迭代,则属性为TRUE。
{foreach $items as $item}
{if $item@first}
this is the first item
{/if}
{/foreach}
还有其他一些有用的foreach属性,如@last
用于获取最后一次迭代,@total
用于获取迭代的总次数。