如何使用smarty模板限制每个@page的输出项目

时间:2014-01-20 06:23:43

标签: php foreach smarty limit output

我有一张物品表。但它超过25项。需要的是前25个项目将在页面中输出。然后剩余的项目将输出到另一页。只有在打印html文件时才能看到。

我在这里使用smarty模板。我正在使用

.page {
    width: 745px;
    page-break-after: always;
}

确定如果每个页面都有另一个页面。然后我用这个:

指定限制:

{assign var='itemLimit' value=25}

计算项目数:

{assign var='itemCount' value=$RO_ITEMS|@count}

计算要循环的页数:

{assign var='pageCount' value=$itemCount/$itemLimit}

计算前25个或多余项目后的项目:

{assign var='extraItems' value=$itemCount%$itemLimit}

指定开始和结束:

{assign var='start' value=0}
{assign var='end' value=$itemLimit}

然后我使用{section}来循环项目:

{section name='invoicePage' loop=$pageCount}

这是我用来循环项目的foreach代码:

{foreach from=$ITEMS item=EACHITEM  name=foo}
{if $smarty.foreach.foo.index >= $start and $smarty.foreach.foo.index < $end}
<tr>
  <td>{$EACHITEM.ITEM_SKU}</td>
  <td>{$EACHITEM.ITEM_TYPE}</td>
  <td>{$EACHITEM.ITEM_BRAND}</td>
  <td>{$EACHITEM.ITEM_COLOR}</td>
  <td>{$EACHITEM.ITEM_SIZE}</td>
  <td>{$EACHITEM.ITEM_QTY}</td>
</tr>
{/if}
{/foreach}

并且在需​​要循环的所有内容的末尾,这是代码:

{$start = $start + $itemLimit}
{$end = $end + $itemLimit}

{/section}

不知何故,它正在打印25件物品。但就是那样.25之后的其他项目都没有输出。谁能告诉我这段代码有什么问题?谢谢和问候。

1 个答案:

答案 0 :(得分:0)

很抱歉,这是Smarty不应该做的事情。 Smarty是显示数据的模板引擎,而不是用于进行高级计算。

此外,如果有很多项目,您的应用程序中的性能可能会非常差。在您的Smarty中,您通过foreach迭代并仅显示所选数据,而您不知道是否有人会打印它们。

此类计算应仅在PHP中完成。在PHP中,您应该只选择那些应该显示的数据,而在Smarty中你应该简单地显示它们。

如果我是你,我会用简单的视图创建一个页面,另一个用显示所有数据的用户打印简单打印它。在第一个用户尝试打印时,我会显示只有简单视图的消息,并查看高级转到网址 - 可以使用css中的媒体打印来完成