我们正在编写一些代码来控制从Tridion Broker数据库查询返回的结果的分页(使用API)。
我们正在使用SDL Tridion 2011 SP1,并且可以使用PagingFilter来获取所选页面上的组件的tcmIds。
然而,在写出分页控件时,我们需要知道结果的总数(以确定将有多少页)。是否有更有效的机制来执行此操作,而不仅仅是为“所有”结果运行单独的查询并对返回的字符串数组执行.Length? (显然,您只会运行此查询一次,并在用户在页面之间点击时保留该值。)
如果我们得到了所有结果,那么当我们只处理“全部”查询中返回的信息时,为什么还要使用PagingFilter呢?
非常感谢, 乔纳森
注意:返回的任何一种类型最多可能有2000个结果。
答案 0 :(得分:8)
在发布组件期间,您可以实现计算所有已发布组件的TBB,然后将结果作为使用标准system.io函数读取的二进制文件发布到文本或XML文件中。您还可以专门发布一个单独的DCP来保存计数(然后您需要每个发布的模式和组件)。
这个想法是在渲染时确定Count,并以某种方式发布该数字。在演示方面拉出一个数字肯定比拉动2000个DCP更快。
答案 1 :(得分:6)
我有3个可能的答案,虽然没有一个可能是正确的或你想要的答案。
使用CD API无法读取返回项目的COUNT。你可以写出类似的扩展。无论是CD存储扩展,还是直接数据库查询等。
您可以阅读集合中的确切项目数。如果您使用组件查询,并且打算检索这些组件的DCP,这尤其棘手。可能是给定组件没有DCP,因此您需要首先读取所有DCP,以便知道要分页的项目的确切数量。显然这会破坏分页的整个目的。您可以通过运行一次查询来缓解此性能下降,然后将其缓存一段时间,但根据您查询的内容,可能是每个网站访问者查询不同的术语,因此性能损失很高。
< / LI>您并不真正关心分页中的项目总数。例如,不是显示“第1页,共23页”,“第2页,共23页”等,而只是显示第1页,第2页,旁边有下一个和上一个按钮。
希望这有帮助!