gpt4 book ai didi

sitecore - Sitecore 如何对内容编辑器树中的项目进行排序?

转载 作者:行者123 更新时间:2023-12-02 06:57:17 36 4
gpt4 key购买 nike

我知道有一个 SortOrder 字段。然而,在我看来,该字段很多次都是空的,直到您真正开始在列表中四处移动内容项。然后,如果您有一个项目列表并四处移动其中一些项目,将为它们分配一个 SortOrder 值,但其他项目在 SortOrder 字段中仍然没有值。

我想不通。我正在尝试编写一种算法,以便我可以按照在内容编辑器中排序的相同方式对网页上的项目进行排序。

编辑:以下是来自 Sitecore.Kernel 的代码,用于比较两个项目。据我所知,它首先尝试使用 Sortorder 字段进行排序。如果它们相等,则它使用名称字段。但我不清楚如果其中一个排序顺序值是数字而其中一个排序顺序值是空白,这段代码会发生什么。它会将空白排序顺序字段视为数字零吗?

/// <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);
}

最佳答案

默认的子项目排序顺序是字母顺序。如果您在父项上设置子项排序,它实际上会使用要使用的算法填写父项上的“子项排序”字段。如果您不更改子项目排序并在子树中移动单个项目并因此“破坏”默认的 alpha 排序,它将在树的该轴内的所有项目上设置一个 SortOrder 值。

测试一下:

  1. 创建一个新项目作为您的根并打开标准字段
  2. 用字母创建子项,例如a, b, c, d, e, f
  3. 查看每个字母项上的“SortOrder”,它们都是空白。
  4. 现在将 d 移到 c 上方,顺序将变为:a、b、d、c、e、f,SortOrder 值分别为 100、200、300、400、500 和 600。

当您上下移动项目时,增量会变小,因为它试图仅更改部分排序顺序,而不是全部。

比较项目的默认算法在 Sitecore.Data.Comparers.ItemComparer 类中。

关于sitecore - Sitecore 如何对内容编辑器树中的项目进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700504/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com