CreatedComparerの現在の実装では、すべてのアイテムのバージョンをすべての言語バージョンで反復処理することで、Createdフィールドでの最小値を見つけています。
多数のバージョンで多数のアイテムを持つサイトでは、このアルゴリズムは最適なものではなく、コンテンツ ツリーでアイテムを展開する際に遅延が発生する可能性があります。
この挙動を改善するための解決策として、以下のものが考えられます:
このアプローチの問題点の一つは、この回避策を実施する前に作成されたアイテムに回避策が適用されるようにするには、そのアイテムの「_Item Created」フィールドを手動で入力する必要があることです。
これは、Sitecore APIでコンテンツ ツリーのすべてのアイテムの順で反復処理し、フィールド値を更新することで簡単に実施することができます。下記の手順3のサンプルの「FillItemCreatedField.aspx」ページで、利用可能なアイテムのバージョンからのCreatedフィールドの最小値で、すべてのコンテンツ アイテムを更新することができます。
この挙動を実装する方法の詳細は、以下の通りです:
/sitecore/templates/System/Templates/Sections/Statistics
public class ItemEventHandler
{
public void OnItemCreated(object Sender, EventArgs args)
{
string fieldName = "__Item Created";
ItemCreatedEventArgs createdArgs = Sitecore.Events.Event.ExtractParameter(args, 0) as ItemCreatedEventArgs;
if (createdArgs == null)
{
return;
}
Item item = createdArgs.Item;
if (item != null && item.Fields[fieldName] != null)
{
using (new EditContext(item, SecurityCheck.Disable))
{
item.Fields[fieldName].Value = Sitecore.DateUtil.ToIsoDate(DateTime.UtcNow);
}
}
}
}
<event name="item:created">
<handler type="[namespace].ItemEventHandler, [assembly name]" method="OnItemCreated"/>
</event>
public class ItemCreatedComparer : CreatedComparer
{
protected override int DoCompare(Item item1, Item item2)
{
return this.GetItemCreationDate(item1).CompareTo(this.GetItemCreationDate(item2));
}
public override IKey ExtractKey(Item item)
{
Assert.ArgumentNotNull(item, "item");
return new KeyObj { Item = item, Key = this.GetItemCreationDate(item), Sortorder = item.Appearance.Sortorder };
}
private DateTime GetItemCreationDate(Item item)
{
if (item.Fields["__Item Created"] == null)
{
return DateTime.MinValue;
}
DateTime creationDate = Sitecore.DateUtil.ParseDateTime(item.Fields["__Item Created"].Value, DateTime.MinValue);
return creationDate;
}
}
サブアイテムの並び替えに関する詳細情報については、以下の記事の3.5章を参照してください:
http://sdn.sitecore.net/Reference/Sitecore%206/Presentation%20Component%20API%20Cookbook.aspx
註:並び替え順は、並び替えのルールよりも優先されます。「Set Subitems sorting」ウィンドウの「リセット」ボタンを押下することで、並び替え順をリセットすることができます。