Smarty,每4次迭代生成一行



如何在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>

但我知道这很愚蠢,我被卡住了,有正常的方法吗?

如果您可以在没有数据的情况下使用空行,则使用以下命令:

{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属性

对于任意数量的列,这将是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>

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>

相关内容

  • 没有找到相关文章

最新更新