Отображение маршрута Sitecore на элемент / контроллер

У меня есть сайт Sitecore 7.1, и я пытаюсь выяснить, как лучше всего реализовать поиск по тегам для блога.

В идеале я хотел бы иметь такой URL-адрес: / tags / tag-go-here

В моем дереве содержимого должен быть элемент sitecore/content/home/tags, чтобы я мог редактировать содержимое и т. Д. С помощью Sitecore. Я хотел бы, чтобы все маршруты, подобные приведенным выше, были сопоставлены с элементом и были бы в состоянии каким-то образом получить параметр "tag-go-here" в мой контроллер / рендеринг.

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

routes.MapRoute(
            "Tags",
            "tags/{tag}",
          new
          {
              controller = "Tag", 
              action = "Index", 
              tag = UrlParameter.Optional, 
          });

Это работает, но не совсем то, что я хочу. Он просто отображает мое представление в браузере, но я не могу использовать Sitecore для добавления к нему каких-либо визуализаций или контента, поскольку в Sitecore нет соответствующего элемента. Как лучше всего подойти к этому в Sitecore MVC?

Благодарю.

1 ответ

Решение

Указав маршрут таким, какой вы есть, и указав контроллер, вы фактически обходите Sitecore. См. Раздел 4.1 Руководства для разработчиков Sitecore MVC.

Вы можете использовать элементы подстановки (раздел 1.2.6 документа " Повторное использование и обмен данными") для обработки тегов, это позволит вам работать с элементом как с любым другим элементом Sitecore и добавлять макет / рендеринг / правила и т. Д.

Вы можете найти несколько соответствующих примеров здесь: Sitecore MVC Music Store, это пример Sitecore 6.6, но концепции все те же.

Вы также можете взглянуть на модуль Wildcard, но, глядя на исходный код, я не уверен, что он будет работать с MVC, так как есть некоторый специфичный для WebForms код, но его должно быть достаточно легко изменить.

Другие вопросы по тегам