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