我有一个生成元素数组的php页面。为简单起见,我们假设它按数字顺序包含数字1-5。这些数字需要相等(或尽可能接近相等)分成两列(使用html表),如下所示:
1 4
2 5
3
列数可能会在将来发生变化。由于这是对表示级别的更改,因此我认为它应该是可以通过仅在模板文件中进行更改来实现的。这告诉我,Smarty应该将元素划分为列。
有没有办法用Smarty(以及如何)实现这一点,还是应该让php文件完成所有工作?
答案 0 :(得分:5)
可以巧妙地做到这一点,但由于HTML和CSS实际上并不支持列,所以很难做到。它涉及计算数组中有多少项,并首先使用{section}标签抓住项目的前半部分(向上舍入),并将它们显示在一列中,然后单独的{section}抓住第二列将项目的一半(四舍五入)放在第二列中。
对于{section},您可以指定要开始的数组索引以及所需的项目数。如果将数组中的项目数设置为另一个变量,则可以计算它。
您可以尝试这样的代码 - 但我担心我没有测试过这些计算,所以它可能是错误的......
<td>
{section name=myitem loop=$items max=(($itemcount/2)+0.499)}
{$items[myitem]}
{/section}
</td>
<td>
{section name=myitem loop=$items start=(($itemcount/2)+0.499)}
{$items[myitem]}
{/section}
</td>
答案 1 :(得分:0)
这里我的解决方案使用foreach和迭代:
<ul>
{foreach from=$items item=item name=firstFE}
{if $smarty.foreach.firstFE.index lt ($items|@count / 2)}
<li>{$item->title}</li>
{/if}
{/foreach}
</ul><ul>
{foreach from=$items item=item name=secFE}
{if $smarty.foreach.secFE.index gte ($items|@count / 2)}
<li>{$item->title}</li>
{/if}
{/foreach}
</ul>