2012-05-02 3 views
0

Я пытаюсь отобразить представление, определенное в модуле, на главной странице сайта (~ /) в качестве основного содержимого. Если пользователь не прошел аутентификацию, мне нужно отобразить вид входа/регистрации.Вид модуля модуля Rchard CMS на домашней странице

Представленный вход живет в одном модуле (Product Module), а вид входа/регистрации живет в другом (модуль учетной записи). Для входа в систему требуется вызов службы для извлечения данных на основе продуктов пользователя. В настоящее время я использую стандартный mvc для визуализации этих представлений и получения требуемых данных в своих контроллерах.

Можно ли это сделать, рассматривая эти представления как шаблоны формы? Если да, то есть ли какие-либо примеры привлечения взглядов на домашнюю страницу, как это? Или есть лучший способ добиться этого?

Я попытался внедрить IHomePageProvider, чтобы вернуть свою домашнюю страницу ViewResult в модуле Product, но без каких-либо успехов.

Cheers.

ответ

3

Во-первых, вы можете захотеть взглянуть на виджеты и слои. Вы можете определить слой для аутентифицированных пользователей и один для анонимных пользователей и присоединить виджеты к этим слоям для достижения того, чего вы хотите. Это может быть наилучшим способом для вас. Посмотрите в документах Orchard для примера о том, как это сделать.

Я сделал аналогичную вещь перед использованием пользовательского контроллера и много пользовательской логики. Из-за моих особых требований виджеты и слои не будут работать для этого. Весь контент на странице, который необходимо изменить в зависимости от некоторых входов, а также виджетов и слоев, не подходит для этого. То, что я сделал, это создать настраиваемый контроллер и соответствующий маршрут с высоким приоритетом (так что маршрут имеет приоритет над любыми другими, которые хотят быть домашней страницей). Я вообще не возился с IHomePageProvider.

В действии контроллера я вытащил данные необходим, и создал форму, которые я хотел, а затем вернулся результат, как этот: return new ShapeResult(this, homePageShape);

homePageShape построен так, прямо перед обратным утверждением:

 // Create personalized home page shape: 
     var homeShape = _orchardServices.New.CustomHome(
      SomeShape1: someShape1 
      , SomeShape2: someShape2 
      , SomeModel1: someModel1 
      ... 
     ); 

Это создает форму CustomHome, а сад автоматически ищет шаблон под названием CustomHome.cshtml в папке представлений вашего модуля.

Я создал несколько фигур (все вазы «someShapeX», которые вы видите выше). В основном они создаются из частей контента через метод BuildDisplay(). Части контента опрашиваются с помощью IContentManager и формы созданы, как это (этот пример для слайд-шоу формы):

 dynamic sliderShape = _contentManager.BuildDisplay(sliderPart, "Detail"); 

Вы можете поместить логику в контроллер для создания формы, которые вы хотите в зависимости от того, не пользователь выполнил вход. В CustomHome.cshtml вы визуализировали бы такую ​​форму:

 @Display(Model.SomeShape1) 
+0

Отличный ответ, спасибо! Попробуй это и пометьте как ответ, если он сработает для меня :) –

Смежные вопросы