我知道有一个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