Во-первых, вы можете захотеть взглянуть на виджеты и слои. Вы можете определить слой для аутентифицированных пользователей и один для анонимных пользователей и присоединить виджеты к этим слоям для достижения того, чего вы хотите. Это может быть наилучшим способом для вас. Посмотрите в документах 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)
Отличный ответ, спасибо! Попробуй это и пометьте как ответ, если он сработает для меня :) –