我们有一个网站,其中包含多个查询内容项的直接子项。我们只想让孩子按照他们在内容树中出现的顺序排序。
我们正在使用Glass Mapper,我们的集合属性如下所示:
[SitecoreQuery("/sitecore/content/Global/Team Members/Categories/*")]
public IEnumerable<ICategory> Categories { get; set; }
上面的属性Categories返回看起来像alpha顺序的子项,但在某些情况下它似乎有点随机。
知道如何设置查询以提取内容树的顺序吗?
答案 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以正确的顺序返回您的商品。