Smarty как получить первый индекс от foreach?
строительство это:
<!-- 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
elemets имеет значение $ limit. Как сделать его хорошим? Мне нужен только первый.
3 ответов
Не могли бы вы сделать это с помощью ключа массива?
{foreach from=$rows key=i item=row}
{if $i == 0}
First item in my array
{/if}
{/foreach}
Я не хочу показаться грубым, но ответ Бондье не будет работать во всех случаях. Поскольку массивы 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}