【发布时间】:2012-04-07 23:07:39
【问题描述】:
我们正在编写一些代码来控制从 Tridion Broker 数据库查询返回的结果的分页(使用 API)。
我们使用的是 SDL Tridion 2011 SP1,可以使用 PagingFilter 获取所选页面上组件的 tcmId。
但是,在写出分页控件时,我们需要知道结果的总数(以确定将有多少页)。是否有比仅对“所有”结果运行单独查询并在返回的字符串数组上执行 .Length 更有效的机制来执行此操作? (显然,您只需要运行一次此查询,并在用户在页面之间单击时保留该值。)
如果我们得到所有结果,那么当我们可以处理“全部”查询中返回的信息时,为什么还要使用 PagingFilter?
提前非常感谢, 乔纳森
注意:可能最多返回 2000 个任何一种类型的结果。
【问题讨论】:
-
我知道以前的内容交付返回的对象已被缓存,但现在(完全匹配)代理查询已被缓存(自 Tridion 2011 以来?)--也许这可能是使用特定的过滤器?我见过 JavaScript 驱动的分页,但不确定比你的两个查询方法更好的想法。
-
很好的问题乔恩,看起来你不能做一个“COUNT(....)”风格的查询。
-
谢谢尼尔。是的,我们认为可能还有更有效的 COUNT(...) 机制。 PagingFilter 方法非常有用,如果您知道您将拥有多少页面或不需要知道有多少页面(并处理有效返回的空数组),但我认为这种情况很少见。
-
这种 API 的一个常见技巧是请求比您打算显示的项目多一个(所以当您显示 50 个项目时请求 51 个项目)。这样您就知道在获得第 51 个项目时显示“下一步”按钮。