6

构造是这样的:

<!-- 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 值。怎么做才好?我只需要第一个。

4

3 回答 3

20

我不想显得粗鲁,但邦迪的回答并非在所有情况下都有效。由于 PHP 的数组是有序映射,所以第一个键的值不会总是 0。

在这些情况下,您可以使用@index@iteration@first属性。更多详细信息在http://www.smarty.net/docs/en/language.function.foreach.tpl#foreach.property.iterationforeach上的 smarty文档中

您的问题的可能解决方案之一如下:

{foreach $rows as $row}
    {if $row@iteration == 1}
        First item in my array          
    {/if}            
{/foreach}
于 2013-05-10T14:27:29.613 回答
11

您可以使用以下代码:

{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}
于 2014-07-25T10:17:14.200 回答
6

你可以通过数组键来做到这一点吗?

{foreach from=$rows key=i item=row}
     {if $i == 0}
         First item in my array
     {/if}
{/foreach}
于 2012-12-27T15:23:18.223 回答