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}