首先,您可能想要查看小部件和圖層。您可以爲已認證的用戶定義一個圖層,爲匿名用戶定義一個圖層,並將小部件附加到這些圖層以實現您想要的效果。這可能是您完成這一任務的最佳方式。在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)
很好的答案,謝謝!如果它適用於我,請試用並標記爲答案:) –