Archive

Archive for November, 2009

Custom Subitems sorting

13/11/2009 Leave a comment

Subitems sorting in sitecore only works for some of predefined fields. But it is an easy task to sort items for none standardfields. Subitems sorting is found in Sorting dialog here

First you need to create your own subitem sorting. This can be found in the master database under system/setting/subitems sorting

Easiest thing to do is just to duplicate one of the existing items and edit the duplicated item.

The name of the items will be shown in the sorting list so give i a meaning full name, i choose own created as an example. Bad name !

You need to specifiy in which assambly your compare class is presented in.

This is done in the Data-section.

So for this example we created a our own date field but not all items derives from a template that gives acces to this field, so as a fallback we look at the sitecore __created field “standard field under statistics.

The keypart is the DoCompare function in the following code.


namespace PT.SubItemsSorter
{
public class CreatedComparer : Comparer
{<br>
/// <summary>
/// Initializes a new instance of the <see cref="CreatedComparer"/> class.
/// </summary><br>
/// <remark>Created 13-11-2009 11:55 by ts</remark>
public CreatedComparer(

}

// Methods
protected override int DoCompare(Item item1, Item item2)
{
return GetCreatedDate(item2).CompareTo(GetCreatedDate(item1));
}

/// <summary>
/// Gets the created date.
/// </summary>
/// <param name="item">The item.</param>
/// <returns></returns>
/// <remark>Created 13-11-2009 11:55 by ts</remark>
private DateTime GetCreatedDate(Item item)
{
if (String.IsNullOrEmpty(item[DatasourceCreatedField])
returnĀ  GetDate(item,SitecoreCreatedDateField);
return GetDate(item, DatasourceCreatedField);
}

/// <summary>
/// Gets the date.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="field">The field.</param>
/// <returns></returns>
/// <remark>Created 13-11-2009 11:55 by ts</remark>
private DateTime GetDate(Item item,string field)
{
DateField dateField = ((DateField)item.Fields[field]);
return dateField.DateTime;
}

private const string DatasourceCreatedField = "DataSource_CreatedDate";
private const string SitecoreCreatedDateField = "__Created";
}
}


Now you should be able to se it in the subitems sorting list. The code gives you the newest first.

Categories: C#, Sitecore 6 Tags: ,