我正在使用Smarty将数组输出到HTML表格。我希望表中的每一行都不超过8个项目。如果数组有超过8个项目,那么代码将为溢出项目创建一个新行。
我该怎么做?这是清楚的吗?
答案 0 :(得分:3)
自从我使用Smarty以来已经有很长一段时间了,但你应该可以这样做:
<tr>
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 8 == 0 && $smarty.foreach.foo.index > 0 }
</tr><tr>
{/if}
<td>{$i.label}</td>
{/foreach}
</tr>
如果索引可以被8分割,则模数运算符仅返回0,因此在每第9个项之前它会添加一个新行。我们不希望第一个项目发生这种情况,所以我们也要检查一下。
答案 1 :(得分:1)
以下是我过去的做法:
<table>
{foreach from=$array item='array_item' name='array_items'}
{if $smarty.foreach.array_items.first}
{* first item - start of all the rows *}
<tr><td>{$array_item}</td>
{elseif $smarty.foreach.array_items.index % 8 == 0}
{* 8 items added to row - start new row *}
</tr><tr><td>{$array_item}</td>
{elseif $smarty.foreach.array_items.last}
{* last item - end the row (or add logic to fill out row with empty cells if needed) *}
<td>{$array_item}</td></tr>
{else}
{* normal item - add cell *}
<td>{$array_item}</td>
{/if}
{/foreach}
</table>