2014-08-27 160 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方法進行二級排序。