Сортировка элементов «Дней» в Sitecore по дням недели

Есть ли способ отсортировать следующие элементы по дням недели.

введите здесь описание изображения

В С# я могу сделать что-то вроде этого:

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

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

Но я не знаю, как добиться такой функциональности с помощью Sitecore.


person Kamran    schedule 14.09.2015    source источник
comment
Каково ваше намерение? Вы хотите, чтобы эти элементы автоматически сортировались внутри папки в редакторе контента? Или же?..   -  person Dmytro Shevchenko    schedule 14.09.2015
comment
Почему бы не установить поле Sortorder в Sitecore?   -  person Jan Bluemink    schedule 14.09.2015
comment
@DmytroShevchenko Когда я получу предметы и покажу на странице. Они появляются в том же порядке, как показано на картинке в моем вопросе. Думаю отсортировать их в Sitecore. Так что, когда я их получу, они уже будут отсортированы.   -  person Kamran    schedule 14.09.2015
comment
@JanBluemink Я понятия не имею о поле Sortorder Field, я сейчас погуглю. Спасибо!   -  person Kamran    schedule 14.09.2015
comment
They appear in the same order as shown in picture - Почему бы тебе просто, ну, не отсортировать их вручную? Нажмите + перетащите их или переместите их вверх / вниз с вкладки «Главная» на ленте.   -  person jammykam    schedule 14.09.2015
comment
@jammykam Нет, отделов много, и у каждого филиала есть своя папка с часами работы. Затем я должен делать это вручную для всех из них, а для каждого нового отдела я должен делать это каждый раз вручную.   -  person Kamran    schedule 14.09.2015
comment
Тогда вам придется создать свой собственный сортировщик или использовать шаблоны Branch для создания предварительно отсортированного набора элементов.   -  person jammykam    schedule 14.09.2015
comment
@jammykam Ну, эти элементы с именами дней создаются с помощью элементов ветвления. В филиалах я отсортировал предметы. Но когда-то они создаются внутри ведомства. Они снова сортируются по имени. Было бы неплохо с вашей стороны, если бы вы в нескольких предложениях написали, как я могу реализовать свой собственный сортировщик. Спасибо !!   -  person Kamran    schedule 14.09.2015


Ответы (2)


Если вам действительно важно отображать дни, отсортированные во внешнем интерфейсе, независимо от того, как они организованы в редакторе контента, просто отсортируйте их в коде, прежде чем отображать их, например.

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 и установите тип для своего класса.

Вы должны установить сортировку подэлементов на стандартные значения шаблона. В этом случае похоже, что у вас есть простой шаблон папки, поэтому вам нужно создать более конкретный шаблон для папки «Часы работы». Несмотря на это, пользователь может решить изменить порядок элементов ИЛИ изменить сортировку по умолчанию для этой папки. Единственный гарантированный способ принудительного вывода — это сортировка перед рендерингом, т.е. первый бит кода.

person jammykam    schedule 14.09.2015
comment
Большое спасибо. Принудительный вывод путем сортировки перед рендерингом является более надежным вариантом. - person Kamran; 15.09.2015