Sitecore / Glass Mapper:如何按内容树的顺序返回查询

时间:2015-01-02 23:17:48

标签: sitecore glass-mapper

我们有一个网站,其中包含多个查询内容项的直接子项。我们只想让孩子按照他们在内容树中出现的顺序排序。

我们正在使用Glass Mapper,我们的集合属性如下所示:

[SitecoreQuery("/sitecore/content/Global/Team Members/Categories/*")]
public IEnumerable<ICategory> Categories { get; set; }

上面的属性Categories返回看起来像alpha顺序的子项,但在某些情况下它似乎有点随机。

知道如何设置查询以提取内容树的顺序吗?

1 个答案:

答案 0 :(得分:5)

斯科特,

我相信Glass正在使用这些SitecoreQueries的快速查询,这就是为什么你没有得到任何可预测的排序顺序。不幸的是,快速查询不允许在查询语法中进行排序。如果您使用以下语法将查询放入Sitecore开发人员中心的XPath Builder中,您将会看到相同的内容:

fast:/sitecore/content/Global/Team Members/Categories/*

我认为解决此问题的最快方法是将Sitecore的__Sortorder字段添加到您的ICategory定义中。

[SitecoreField("__Sortorder"),]
string Sortorder { get; set; }

然后,您可以向模型中添加另一个属性,该属性将返回此类型的排序版本。

public IEnumberable<ICategory> SortedCategories { get { return Categories.OrderBy(s=>s.Sortorder); } }

请记住,您还可以使用[SitecoreChildren]装饰器来获取当前项目的子项。我不确定这是否真的是您所追求的,但该装饰者实际上会按照Sitecore的SortOrder以正确的顺序返回您的商品。