在Sitecore中,我认为sortorder总是优先于子项排序。我的假设是,如果一个子项的sortorder为100,另一个子项的sortorder为0,那么项的子项排序设置为什么并不重要,0的子项将首先出现。在最近的一个项目中,我在内容树中看到了相反的情况。子项排序被赋予优先级。有没有办法配置sortorder和子项排序的检查顺序?我一直在查看我的web.config,并将其与我的一个项目进行了比较,该项目的工作方式与我认为的应该是一样的,但我找不到任何突然出现在我身上的东西。
我在项目的内容树中看到的视觉效果似乎给了子项排序优先级:
parent - subitem sorting = created
child1 - created = 01012014, sortorder = 100
child2 - created = 02022014, sortorder = 0发布于 2014-08-28 00:42:16
这可能是Sitecore中的一个错误,但它也可能按预期工作,您可能需要联系Sitecore支持人员来找出是哪个错误。
"Created“的子排序指向Sitecore.Data.Comparers.CreatedComparer、Sitecore.Kernel。如果查看这个类中的ExtractKey()方法,就会发现它没有包含原始项的SortOrder。如果没有此选项,Sitecore将仅按创建日期排序。
public override IKey ExtractKey(Item item)
{
Assert.ArgumentNotNull(item, "item");
KeyObj keyObj = new KeyObj()
{
Item = item,
Key = this.GetCreationDate(item)
};
return keyObj;
} 相反,您可以查看"Updated“的子项排序,它指向Sitecore.Data.Comparers.UpdatedComparer、Sitecore.Kernel。在它的ExtractKey()方法中,您可以看到它返回项目的排序顺序,因此您将获得Updated和排序顺序之间的混合排序。
public override IKey ExtractKey(Item item)
{
Assert.ArgumentNotNull(item, "item");
KeyObj keyObj = new KeyObj()
{
Item = item,
Key = item.Statistics.Updated,
Sortorder = item.Appearance.Sortorder
};
return keyObj;
}发布于 2016-05-20 00:31:03
当您指定要使用的自定义排序器时,如何对项进行排序完全取决于运行比较器的代码。
比较器必须是System.Collections.Generic.IComparer,但之后就不能保证是否使用排序顺序字段,或者如果使用它,它将是升序还是降序。
我建议检查为特定项目选择的排序器,并使用dotPeek分析该排序器的源代码。
在构建定制的排序器时,最好扩展Sitecore的Sitecore.Data.Comparers.Comparer类并覆盖DoCompare方法。它将始终如一地处理排序顺序字段,并回退到DoCompare方法进行二次排序。
https://stackoverflow.com/questions/25530353
复制相似问题