有没有办法根据星期几来对以下项目进行排序。
在C#中,我可以这样做:
string [] initialArray = {"Friday", "Monday", ... } ;
string [] sortedArray = initialArray.OrderBy(s => Enum.Parse(typeof(DayOfWeek), s)).ToArray() ;
但我不知道如何使用Sitecore实现这种功能。
答案 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)