2014-08-27 44 views
3

在Sitecore中,我认为sortorder总是优先于subitem排序。我的想法是,如果一个项目的子项排序被设置为1,如果其中一个子项的排序顺序为100,而另一个排序顺序为0,那么0排在第一位。在最近的一个项目中,我看到内容树中出现了相反的情况。子项目排序正在被优先考虑。有没有办法配置sortorder和subitem排序检查的顺序?我一直在环顾我的web.config,并将它与我为一个正在按我认为应该的方式工作的项目分开,但我无法找到任何跳出我的东西。Sitecore Sortorder vs Subitem Sorting

视觉我所看到的内容树的项目,似乎给分项目排序优先级:

parent - subitem sorting = created 
    child1 - created = 01012014, sortorder = 100 
    child2 - created = 02022014, sortorder = 0 
+0

你在哪里看?是否在Sitecore树中排序顺序不受尊重? – RobertoBr 2014-08-27 15:28:00

+0

是的,在内容编辑器中,项目以我不期望的方式显示。我还没有尝试通过父项的Children属性拉出项目,但尝试一下并查看它们出来的顺序可能是个好主意。 – Teeknow 2014-08-27 16:30:35

回答

4

这可能是Sitecore的一个错误,但它也可以按预期运行,你可能需要联系Sitecore支持来找出哪些。

“创建”的子分类指向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; 
    }  

相反,你可以看看孩子“更新”,它指向Sitecore.Data.Comparers.UpdatedComparer,Sitecore.Kernel排序。在它的ExtractKey()方法中,您会看到它正在返回项目的排序顺序,因此您将在更新日期和排序顺序之间获得混合排序。

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; 
    } 
0

当您指定一个自定义的分类器中使用,这完全取决于到运行中的项目是如何排序的比较器的代码。

比较器必须是System.Collections.Generic.IComparer,但在此之后,不能保证排序顺序字段是否将被使用,或者如果使用它将按升序或降序排列。

我建议检查为特定项目选择的分拣机,并使用dotPeek分析分拣机的源代码。


在构建定制的分拣机,这是很好的做法,延长Sitecore的Sitecore.Data.Comparers.Comparer类并覆盖DoCompare方法。它将始终如一地处理排序顺序字段,并回退到DoCompare方法进行二级排序。