Можно ли использовать запросы в качестве источника данных для рендеринга Sitecore со Glass Mapper?
Я строю сайт с помощью Sitecore 7.5 и Glass Mapper 3.2.3. Когда я добавляю подслой к деталям презентации страницы, Glass Mapper будет предполагать, что источником данных для подслоя должна быть текущая страница. Я также могу явно указать источник данных для рендеринга, выбрав другую страницу на сайте в диалоговом окне сведений о презентации.
Glass Mapper по-прежнему работает нормально и использует другую выбранную страницу в качестве источника данных для рендеринга. Однако если я попытаюсь использовать диалоговое окно "Построить запрос" и создать запрос для моего источника данных, Glass Mapper, похоже, проигнорирует это и просто использует текущую страницу в качестве источника данных. Есть ли какой-нибудь способ использовать запрос, который я построил, используя диалог Build Query?
РЕДАКТИРОВАТЬ: Вот еще немного информации о моей настройке. У меня есть один шаблон данных в Sitecore, который называется ContentPage. У этого есть одно поле: Содержание. У меня есть несколько страниц на сайте, которые используют этот шаблон данных. У меня есть подслой под названием sublayoutPageContent. Он наследуется от GlassUserControl. Все, что он делает, это отображает поле Content. Если я добавлю этот подслой к деталям презентации для страницы A и не укажу источник данных, он будет работать нормально. Когда я поднимаю страницу A, она отлично отображает поле контента со страницы A. Я также могу перейти к деталям презентации для подслоя и сказать ему использовать другую страницу в качестве источника данных - скажем, страницу B. Если я это сделаю, а затем перейду на страницу A, я увижу поле "Содержимое" со страницы B. Отлично - это работает как положено. Теперь вместо выбора страницы для источника данных я использую Query и в этом Query выбираю страницу B. Теперь, когда я просматриваю страницу A, я вижу поле Content для страницы A, а не страницы B. Надеюсь, это объясняет это лучше.
2 ответа
Если вы поддерживаете Редактор страниц, и эти источники будут регулярно меняться, вы можете использовать Шаблон источника данных и Расположение источника данных вместо использования источника данных. Затем, когда вы добавляете элемент через редактор страниц, вам будет предложено создать или выбрать элемент источника данных. Это делает это действительно легко, особенно в сценарии, который вы описываете. Вы можете использовать статические или относительные пути для местоположения источника данных. Я часто использую подобную конструкцию, хотя с более чем 1 полем, и она работает очень хорошо. Вы можете использовать это, даже если вы не используете Редактор страниц, но лучше всего поддерживать Редактор страниц и DMS, и это обеспечивает гибкость обоих.
Если вам нужно несколько элементов, это не сработает, но, исходя из вашего описания, кажется, вам просто нужно иметь возможность выбирать между ними. Кроме того, в подобных сценариях вы можете сгруппировать несколько элементов в папке или другом элементе и использовать атрибут [SitecoreChildren] и просто получить элементы таким образом. На самом деле все зависит от того, насколько вы должны быть гибкими и каковы ваши требования.
Поскольку запрос может возвращать несколько элементов, вы должны изменить код так, чтобы он предполагал наличие нескольких элементов вместо одного. Не уверен, как это работает в веб-формах, но в Razor вы делаете что-то вроде этого:
+ Изменить
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<MyEntity>
к
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<IEnumerable<MyEntity>>