2012-05-02 167 views
0

我試圖呈現一個觀點,一個模塊中定義的模塊來看,在主要網站主頁(〜/)作爲它的主要內容。如果用戶未通過身份驗證,則需要顯示登錄/註冊視圖。果園CMS渲染網頁

已登錄的視圖生命一個模塊(產品模塊)和登錄/在另一個(賬戶模塊)寄存器視圖生命英寸登錄視圖需要服務調用才能根據用戶的產品獲取數據。我目前使用標準的mvc渲染這些視圖並獲取他們的控制器中所需的數據。

這可以通過將這些視圖視爲形狀模板來完成嗎?如果是這樣,是否有任何例子將視圖拉入主頁這樣?或者有更好的方法來實現這一目標?

我試圖implmenting IHomePageProvider商品模塊內返回自己的主頁的ViewResult,但沒有成功。

乾杯。

回答

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

很好的答案,謝謝!如果它適用於我,請試用並標記爲答案:) –