根据星期几对Sitecore中的“天数”项进行排序

时间:2015-09-14 14:17:35

标签: sitecore sitecore7.2

有没有办法根据星期几来对以下项目进行排序。

enter image description here

在C#中,我可以这样做:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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/templates/System/Child Sorting下创建项目类型/sitecore/system/Settings/Subitems Sorting的项目,并将类型设置为您的班级。

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

答案 1 :(得分:0)