2015-01-02 2 views
2

У нас есть сайт с несколькими запросами, которые запрашивают прямые дочерние элементы контента. Мы просто хотим, чтобы только дети отсортировались по порядку, который они отображают в дереве контента.Sitecore/Glass Mapper: как вернуть запрос в порядке содержания дерева

Мы используем стекло Mapper и наши свойства коллекции выглядеть следующим образом:

[SitecoreQuery("/sitecore/content/Global/Team Members/Categories/*")] 
public IEnumerable<ICategory> Categories { get; set; } 

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

Любая идея, как настроить запрос на растяжение в порядке дерева контента?

+0

Стекло не использует быстрый запрос по умолчанию. Я не уверен, почему это будет вести себя так. Вы сравнили возвращенные результаты Glass против возвращенных результатов API Sitecore? –

ответ

4

Скотт,

Я считаю, что Glass использует быстрый запрос для этих SitecoreQueries поэтому вы не получаете предсказуемый порядок сортировки. К сожалению, быстрый запрос не позволяет сортировать синтаксис запроса. Вы увидите то же самое, если вы положили ваш запрос в XPath Builder в Центре разработчиков Sitecore путем, используя следующий синтаксис:

fast:/sitecore/content/Global/Team Members/Categories/* 

Я думаю, что самый быстрый способ решить эту проблему, чтобы просто добавить поле __Sortorder Sitecore к вашему определению ICategory.

[SitecoreField("__Sortorder"),] 
string Sortorder { get; set; } 

Затем вы можете добавить другое свойство в свою модель, которое возвращает отсортированную версию этого файла.

public IEnumberable<ICategory> SortedCategories { get { return Categories.OrderBy(s=>s.Sortorder); } } 

Имейте в виду, вы также можете использовать [SitecoreChildren] декоратора, чтобы получить детей текущего элемента. Я не уверен, что это на самом деле то, что вам нужно, но этот декоратор действительно вернет ваши товары в правильном порядке в SortOrder Sitecore.