Sitecore Sortorder与Subitem排序

时间:2014-08-27 14:50:54

标签: sorting sitecore subitem

在Sitecore中,我认为sortorder总是优先于subitem排序。我假设项目的子项目排序设置为什么并不重要,如果其中一个孩子的排序顺序为100而另一个孩子的0中的一个具有0会先出现。在最近的一个项目中,我发现在内容树中发生了相反的情况。 Subitem排序被优先考虑。有没有办法配置检查sortorder和subitem排序的顺序?我一直在环顾我的web.config并将其与一个项目进行区分,该项目按照我认为应该的方式工作,但我找不到任何跳出来的东西。

我在内容树中看到的项目似乎给了子项分类优先权:

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

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

当您指定要使用的自定义排序器时,它完全取决于运行比较器的代码如何对项目进行排序。

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

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

在构建自定义排序器时,扩展Sitecore的Sitecore.Data.Comparers.Comparer类并覆盖DoCompare方法是一种很好的做法。它将始终如一地处理排序顺序字段,并回退到DoCompare方法进行二次排序。