我有好消息和坏消息要告诉你。
首先,好消息。在拉出 20 个项目之前,您可以使用 Criteria 对象按 Content Properties 排序。您需要使用条件的 OrderByField 和 OrderByDirection 属性。
criteria.OrderByField = ContentProperty.DateCreated;
criteria.OrderByDirection = EkEnumeration.OrderByDirection.Descending;
坏消息是在尝试根据智能表单中的字段订购商品时出现。您或许可以使用 IndexSearch API 执行此操作,但由于 Ektron 8.0* 仍然依赖于 Microsoft 的索引服务,因此我不喜欢这种方法,也没有任何代码可共享。如果您选择走那条路线,前提是使用搜索以正确的顺序返回内容 ID,然后按照您的原样使用条件来获取具有这些 ID 的项目。
您可以仅使用 API 执行的操作是在加载数据后使用 Microsoft LINQ 对数据进行排序,但为了以正确的顺序获得正确的结果,您必须首先加载所有项目(并理想地缓存它们以最大限度地减少性能影响)。我以我的一种内容类型为例,但您应该明白这一点。
var membersList = new List<SlideBannerType>();
var sortedList = membersList.OrderBy(s => s.EnableAlternateText);
var firstpage = sortedList.Take(20);
var nextpage = sortedList.Skip(20).Take(20);
这并不理想,但它确实适用于较小的(数百个,可能是数千个,但不是数十个)数据集。
不过,第二个好消息是 Ektron 将 Microsoft Search Server 用于 8.5 及更高版本。这有一个更强大的 API,并且性能出色(在速度和可靠性方面)。前提实际上与 IndexSearch 相同,使用 Search 以正确的顺序获取 ID,然后使用 ContentManager(或 ContentTypeManager)获取项目。我已经多次使用这种方法,尽管不是专门针对 Smart Forms。最好的结果来自升级到 8.6 和 Microsoft Search Server 并同时使用这两个 API 来获取每一页数据。这样做时,将高级搜索和过滤选项以及新的搜索 API 混合在一起实际上几乎是微不足道的。