我知道有一個SortOrder字段。但是,在我看來,這個字段很多時候都是空的,直到您開始實際移動列表中的內容項目爲止。然後,如果您有一個物品清單,並將其中的一些物品移動,它們將被分配一個SortOrder值,但其他物品在SortOrder字段中仍然沒有值。Sitecore如何對內容編輯器樹中的項目進行排序?
我找不出來。我正在嘗試編寫一種算法,以便可以按照在內容編輯器中排序的方式對網頁上的項目進行排序。
編輯: 以下是來自Sitecore.Kernel的代碼,用於比較兩個項目。從我在這裏可以告訴它它首先嚐試使用排序順序字段。如果這些相同,則使用名稱字段。但是,如果其中一個排序順序值是一個數字,而其中一個排序順序值是空白,那麼我在這段代碼中會發生什麼呢?它是否將空白排序順序字段視爲數字零?
/// <summary>
/// Compares the specified items.
///
/// </summary>
/// <param name="item1">Item1.</param><param name="item2">Item2.</param>
/// <returns/>
/// <contract><requires name="item1" condition="none"/><requires name="item2" condition="none"/></contract>
public int Compare(Item item1, Item item2)
{
if (item1 == null || item2 == null)
{
if (item1 == null && item2 == null)
return 0;
return item1 != null ? 1 : -1;
}
else
{
int sortorder1 = item1.Appearance.Sortorder;
int sortorder2 = item2.Appearance.Sortorder;
string name1 = item1.Name;
string name2 = item2.Name;
return ItemComparer.CompareItems(item1, item2, sortorder1, sortorder2, name1, name2);
}
}
/// <summary>
/// Compares the items.
///
/// </summary>
/// <param name="item1">The item1.</param><param name="item2">The item2.</param><param name="sort1">The sort1.</param><param name="sort2">The sort2.</param><param name="name1">The name1.</param><param name="name2">The name2.</param>
/// <returns/>
private static int CompareItems(Item item1, Item item2, int sort1, int sort2, string name1, string name2)
{
if (object.ReferenceEquals((object) item1, (object) item2))
return 0;
if (sort1 != sort2)
return sort1 - sort2;
if (name1.Length == 0 || name2.Length == 0)
return name1.CompareTo(name2);
if ((int) name1[0] == 95 && (int) name2[0] != 95)
return 1;
if ((int) name1[0] != 95 && (int) name2[0] == 95)
return -1;
else
return name1.CompareTo(name2);
}
呵呵。是的,這就是我認爲它應該起作用的原因。我已經看到奇怪的地方,我會移動列表中的單個項目,只有少數項目會有SortOrder值,其他項目仍然是空白的。也許我看到的東西。 – 2015-02-24 16:22:59
這是一種混亂的方法。清除所有SortOrder值。 Sitecore將恢復爲按字母順序顯示。現在進入並手動設置單個項目的SortOrder值(如您的示例中的d),使其類似於700.它將d移動到列表的末尾。現在點擊b選擇它,然後點擊向上箭頭將它向上移動到列表頂部。它會將b的排序順序設置爲0,並保持其餘的不變。所以現在你有這種奇怪的情況是兩個項目(b和d)在他們的SortOrder字段中有值,其他沒有任何值。 – 2015-02-24 16:43:51
我不能爲我的生活找出Sitecore在這種情況下使用的排序算法來排序項目,當他們中的一些具有排序順序值而另一些沒有。 – 2015-02-24 16:44:42