Конструкция такова:
<!-- 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
имеют предельное значение $. Как сделать это хорошо? Мне нужно только первое.
Можете ли вы сделать это с помощью ключа массива?
{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}