如何增加Smarty变量?

时间:2011-01-05 01:51:31

标签: php smarty

我通常不是Smarty的家伙,所以我有点卡住了。

我想要回显一个数组的索引,但是我希望每次回显它时都会增加它。

这就是我的......

<ul>
    {foreach from=$gallery key=index item=image}
    <li>
        <img src="{$image}" alt="" id="panel-{$index++}" />
    </li>
    {/foreach}
</ul>

它不起作用。

在将数组交给Smarty之前,这是预处理数组的最佳方法吗?

有没有办法可以使用Smarty做到这一点?

6 个答案:

答案 0 :(得分:23)

您可以执行以下操作:

<ul>
    {foreach from=$gallery key=index item=image name=count}
    <li>
        <img src="{$image}" alt="" id="panel-{$smarty.foreach.count.index}" />
    </li>
    {/foreach}
</ul>

从零开始,index是当前数组索引。

这可能是解决问题的最好方法,但是,只需使用foreach循环之外的counter即可使用counter,如下所示:

{counter start=0 skip=1 assign="count"}

要增加它,只需在每次迭代时调用{counter}

{counter}
{*Can then use the $count var*}
   {if $count is div by 4}
      {*do stuff*}
   {/if}

答案 1 :(得分:3)

如果它是聪明的2(来自你使用它的foreach语法),你可以给foreach循环命名,然后使用{$smarty.foreach.name.index}

喜欢这样

<ul>
    {foreach from=$gallery key=index item=image name=foo}
    <li>
        <img src="{$image}" alt="" id="panel-{$smarty.foreach.foo.index}" />
    </li>
    {/foreach}
</ul>

索引从零开始,如果你想要一个从1开始的序列使用.iteration而不是.index

我现在已经有一段时间没用过smarty但是我总是发现官方文档非常好用很多例子http://www.smarty.net/docsv2/en/language.function.foreach.tpl

答案 2 :(得分:0)

在回声后不会$index++增加它吗?

try ++$index;或者在你回应之前做$index++

答案 3 :(得分:0)

假设您运行$ foo,这是一个包含索引和迭代选项的数组

{foreach from=$foo item=bar name=humbug}  
    {$smarty.foreach.humbug.index}
    {$smarty.foreach.humbug.iteration}
{/foreach}

第一列是索引结果,第二列是迭代结果

0 - 1  
1 - 2  
2 - 3  
3 - 4  
4 - 5

这意味着索引从0开始作为其数组索引,其中迭代是循环迭代计数,从1开始。

使用错误值导致问题的实例是在表格中显示4行或任何其他数量的内容。

使用索引会导致布局错误。您将在循环的第一次迭代(索引0)上立即获得行更改,这将在第5次迭代(索引4)中进行自我纠正,但仅在当前布局的范围内,这意味着您的第一行只有1个单元格它。每隔一行就会有4个单元格,第一行之后的每个单元格中的数据将出现在表4单元格中,而不是它应该出现的时间。

{if $smarty.foreach.humbug.index is div by 4}
    </tr><tr>
{/if}

使用迭代将正确布置行更改,直到最后一次迭代或foreach循环为止,给出相等的4行。

{if $smarty.foreach.humbug.iteration is div by 4}
 </tr><tr>
{/if}

在foreach循环之后,您只需将表格行添加得更近以完成最后一行。

我希望这可以帮助别人。

答案 4 :(得分:0)

{foreach from=$foo item=bar name=humbug}  
{$smarty.foreach.humbug.index}
{$smarty.foreach.humbug.iteration}
{/foreach}

{foreach from=$foo item=bar name=berlin}  
{$smarty.foreach.berlin.index}
{$smarty.foreach.berlin.iteration}
{/foreach}

答案 5 :(得分:0)

您可以使用{counter}

  

{counter}用于打印计数。 {counter}会记得   依靠每次迭代。您可以调整数量,间隔和   计数的方向,以及判断是否   打印价值。您可以同时运行多个计数器   为每个人提供一个唯一的名称。如果你没有提供名字,那么   名称“默认”将被使用

来源:http://www.smarty.net/docsv2/en/language.function.counter.tpl

用法:

{counter start=0 print=false assign="count"}

<ul>
 {foreach from=$listing.products item="product"}
    {counter}
    {if $count === 1}
     <p>Count is 1</p>
    {/if}
 {/foreach}
</ul>