Smarty,每4次迭代新行

时间:2014-03-11 12:52:52

标签: php foreach html-table smarty counter

如何在Smarty中设置循环中的每4次迭代,我会在表中获得新行? 我正在尝试这样的事情:

<table>
    {foreach $arr as $v}
       {counter start=0}
       {if $counter/4 == 0}
           <tr><td>{$v}</td></tr>
       {else}
           <td>{$v}</td>
       {/if}
       <td>
    {/foreach}
</table>

但是我明白这是愚蠢的,我被困住了,有没有正常的方法呢?

3 个答案:

答案 0 :(得分:5)

如果没有数据可以使用空行,请使用:

{assign var="counter" value="0"}
<table>
    <tr>
    {foreach $arr as $v}
       {assign var="counter" value=$counter + 1}
       {if $counter % 4 == 0}
           </tr><tr>
       {/if}
       <td>{$v}</td>
    {/foreach}
    </tr>
</table>

如果你不能忍受这个,那么你需要在渲染表之前检查是否有可用的数据。

仍然可以说$arr的计数必须是4的倍数。否则,需要正确设置columnspan属性。

答案 1 :(得分:2)

对于任意数量的列,这将是一个Smarty 3解决方案,没有空行,并在必要时添加一个带有colspan值的最后一个空单元格:

   <table>
        <tr>
    {$cols=4}
    {foreach $arr as $v}
        <td>{$v}</td>
        {if !$v@last AND $v@iteration is div by $cols}
            </tr><tr>
        {/if}
        {if $v@last AND $v@iteration is not div by $cols}
            <td colspan="{$cols-$v@iteration%$cols}"></td>
        {/if}
     {foreachelse}
           <td colspan="{$cols}">No data</td>    
     {/foreach}
        </tr>
    </table>

答案 2 :(得分:0)

没有附加计数器变量且没有空行的Foreach

<table>
<tr>
    {foreach from=$aArray item=sValue name=tags_foreach}
    {if $smarty.foreach.tags_foreach.index != 0 AND $smarty.foreach.tags_foreach.index mod 4 == 0}
        </tr><tr>
    {/if}

    <td>
        {$sValue}
    </td>
    {/foreach}
</tr>