根据星期几对 Sitecore 中的 'Days' 项进行排序

Sort 'Days' Items in Sitecore according to days of week

有什么方法可以根据星期几对以下项目进行排序。

在 C# 中我可以这样做:

string [] initialArray = {"Friday", "Monday", ... } ; 

string [] sortedArray = initialArray.OrderBy(s => Enum.Parse(typeof(DayOfWeek), s)).ToArray() ;

但我不知道如何使用 Sitecore 实现这种功能。

请查看后续文章:

http://firebreaksice.com/how-to-sort-sitecore-items-in-the-content-editor/

http://sitecore.alexiasoft.nl/2009/08/04/sorting-sitecore-items/

http://sitecoreblog.blogspot.in/2010/11/change-default-subitems-sort-order.html

如果您真正关心的是在前端显示排序的日期,而不管它们在内容编辑器中是如何组织的,那么只需在显示它们之前用代码对它们进行排序,例如

using System.Linq;

var openingHours = Sitecore.Context.Item.Children
                           .OrderBy(s => Enum.Parse(typeof(DayOfWeek), s.DisplayName));

如果您想在内容编辑器中对它们进行排序,则需要创建一个自定义排序器。 Sitecore Climber 提供了链接,但对于这个具体示例,您可以使用:

using Sitecore.Data.Comparers;
using Sitecore.Data.Items;

public class DayOfWeekComparer : Comparer
{
    protected override int DoCompare(Item item1, Item item2)
    {
        var x = (int)Enum.Parse(typeof(DayOfWeek), item1.DisplayName);
        var y = (int)Enum.Parse(typeof(DayOfWeek), item2.DisplayName);
        return x.CompareTo(y);
    }
}

然后在 core 数据库中,在 /sitecore/system/Settings/Subitems Sorting 下创建项目类型 /sitecore/templates/System/Child Sorting 的项目,并将类型设置为您的 class.

您应该在模板的标准值上设置子项排序。在本例中,您似乎有一个简单的文件夹模板,因此您需要为您的 Opening Hours 文件夹创建一个更具体的模板。即便如此,用户仍然可以决定重新排序项目或更改该文件夹的默认排序。强制输出的唯一保证方法是在渲染之前进行排序,即代码的第一位。