10

我们正在编写一些代码来控制从 Tridion Broker 数据库查询返回的结果的分页(使用 API)。

我们使用的是 SDL Tridion 2011 SP1,可以使用 PagingFilter 来获取所选页面上组件的 tcmId。

但是,在写出分页控件时,我们需要知道结果的总数(以确定将有多少页)。是否有比仅对“所有”结果运行单独查询并在返回的字符串数组上执行 .Length 更有效的机制来执行此操作?(显然,您只需要运行一次此查询,并在用户在页面之间单击时保留该值。)

如果我们得到所有结果,那么当我们可以处理“全部”查询中返回的信息时,我为什么还要费心使用 PagingFilter?

非常感谢,乔纳森

注意:可能最多返回 2000 个任何一种类型的结果。

4

2 回答 2

8

在发布您的组件期间,您可以实现一个 TBB 来计算所有发布的组件,然后将结果发布到一个文本或 XML 文件中作为您使用标准 system.io 函数读取的二进制文件。您还可以专门发布一个单独的 DCP 来保存计数(然后您需要为每个发布提供一个架构和一个组件)。

这个想法是在渲染时确定计数并以某种方式发布该数字。在演示端拉出一个数字肯定会比拉出 2000 个 DCP 更快。

于 2012-03-24T05:46:16.543 回答
6

我有 3 个可能的答案给你,虽然没有一个可能是正确的或你想要的。

  1. 无法使用 CD API 读取返回项目的 COUNT。你可以写出一种扩展。无论是 CD 存储扩展,还是直接数据库查询等。

  2. 您阅读了您收藏中的确切数量。这在您使用组件查询时尤其棘手,目的是检索这些组件的 DCP。给定组件可能没有 DCP,因此您需要先阅读所有 DCP 才能知道要为其分页的确切项目数。显然,这将破坏分页的整个目的。您可以通过运行一次查询来缓解这种性能下降,然后将其缓存一段时间,但根据您查询的内容,可能是每个网站访问者查询不同的术语,因此性能损失很高。

  3. 您并不真正关心分页中的项目总数。例如,与其显示“第 1 页,共 23 页”、“第 2 页,共 23 页”等……您只需显示第 1 页、第 2 页及其旁边的 Next 和 Prev 按钮。

希望这可以帮助!

于 2012-03-23T16:17:04.743 回答