每第n次Smarty foreach迭代新列

时间:2016-09-09 12:59:11

标签: twitter-bootstrap foreach iteration smarty

我知道这个问题得到了解答,但方式略有不同。

我想要每循环第6次使用一个新的bootstrap列,所以它看起来像这样:

<div class="row">
    <div class="col-xs-6">
        <a href="#">LINK1</a>
        <a href="#">LINK2</a>
        <a href="#">LINK3</a>
        <a href="#">LINK4</a>
        <a href="#">LINK5</a>
        <a href="#">LINK6</a>
   </div>
    <div class="col-xs-6">
        <a href="#">LINK7</a>
        <a href="#">LINK8</a>
        <a href="#">LINK9</a>
        <a href="#">LINK10</a>
        <a href="#">LINK11</a>
        <a href="#">LINK12</a>
   </div>
</div>

我试过了:

<div class="row">
    {foreach name='sub_categories' from=$sub_categories item='sub'}
        {if $smarty.foreach.sub_categories.first or $smarty.foreach.sub_categories.iteration is div by 6}
        <div class="col-xs-6">
        {/if}
           <a href="#">LINK</a>
        {if $smarty.foreach.sub_categories.iteration-1 is div by 6}
        </div>
        {/if}
    {/foreach}
</div>

但这不起作用,因为:

$smarty.foreach.sub_categories.iteration is div by 6
当第6次迭代开始时,

为true,因此smarty在5次迭代后创建一个新列。 <div>也没有第6次关闭,而是第5次关闭。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用索引而不是迭代,因为索引从0开始

<div class="row">
    {foreach name='sub_categories' from=$sub_categories item='sub'}
        {if $smarty.foreach.sub_categories.first or $smarty.foreach.sub_categories.index is div by 6}
        <div class="col-xs-6">
        {/if}
           <a href="#">LINK</a>
        {if $smarty.foreach.sub_categories.last || $smarty.foreach.sub_categories.iteration is div by 6}
        </div>
        {/if}
    {/foreach}
</div>

你也可能想检查sub_categories.last的结束div,以防物品数量不是6的倍数,即9