我通常不是Smarty的家伙,所以我有点卡住了。
我想要回显一个数组的索引,但是我希望每次回显它时都会增加它。
这就是我的......
<ul>
{foreach from=$gallery key=index item=image}
<li>
<img src="{$image}" alt="" id="panel-{$index++}" />
</li>
{/foreach}
</ul>
它不起作用。
在将数组交给Smarty之前,这是预处理数组的最佳方法吗?
有没有办法可以使用Smarty做到这一点?
答案 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>