如何在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>
但是我明白这是愚蠢的,我被困住了,有没有正常的方法呢?
答案 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>