3

Sitecore では、サブアイテムの並べ替えよりも常に並べ替え順序が優先されると考えていました。私は、アイテムのサブアイテムの並べ替えが何に設定されていても、その子の 1 つが 100 の並べ替え順序を持ち、もう 1 つの子が 0 の 1 つを持っていて、0 のものが最初に表示されると仮定していました。最近のプロジェクトでは、コンテンツ ツリーで反対のことが起こっているのを見ています。サブアイテムのソートが優先されます。sortorder とサブアイテムの並べ替えがチェックされる順序を構成する方法はありますか? 私は自分のweb.configを見回して、思った通りに機能していたプロジェクト用に持っていたものと比較しましたが、飛び出したものは何も見つかりませんでした。

サブアイテムの並べ替えを優先しているように見えるプロジェクトのコンテンツ ツリーに表示されているもののビジュアル:

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

2 に答える 2

5

これは Sitecore のバグである可能性がありますが、意図したとおりに機能している可能性もあります。Sitecore サポートに問い合わせて、その原因を特定する必要がある場合があります。

"Created" の子の並べ替えは 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;
    }
于 2014-08-27T16:42:15.673 に答える
0

使用するカスタム ソーターを指定する場合、項目の並べ替え方法について比較機能を実行するコードは完全に決定されます。

比較演算子は である必要がありますがSystem.Collections.Generic.IComparer、その後、並べ替え順序フィールドが使用されるかどうか、または使用された場合に昇順または降順になるかどうかについての保証はありません。

特定のアイテムに対して選択されたソーターを調べ、dotPeek を使用してソーターのソース コードを分析することをお勧めします。


カスタマイズされたソーターを構築する場合、Sitecore のSitecore.Data.Comparers.Comparerクラスを拡張してメソッドをオーバーライドすることをお勧めしますDoCompare。ソート順フィールドを一貫して処理し、DoCompare二次ソートのメソッドにフォールバックします。

于 2016-05-19T16:31:03.357 に答える