2012-05-02 21 views
0

モジュールで定義されたビューをメインのホームページのホームページ(〜/)にレンダリングしようとしています。ユーザーが認証されていない場合は、代わりにログイン/登録ビューを表示する必要があります。Orchard CMS Render module view in homepage

ログインしたビューは1つのモジュール(製品モジュール)に存在し、ログイン/レジスタビューは別のアカウントモジュールに存在します。ログインしたビューには、ユーザーの製品に基づいてデータを取得するためのサービス呼び出しが必要です。私は現在、これらのビューをレンダリングし、コントローラで必要なデータをフェッチするために標準のMVCを使用しています。

これらのビューをシェイプテンプレートとして扱うことでこれを達成できますか?もしそうなら、このようなホームページにビューを引き込む例はありますか?それともこれを達成する良い方法がありますか?

私は、IHomePageProviderを実装して、Productモジュール内で自分のホームページViewResultを返すように試みましたが、成功しませんでした。

乾杯。

答えて

3

まず、ウィジェットとレイヤーを調べるとよいでしょう。認証されたユーザー用のレイヤーと匿名ユーザー用のレイヤーを定義し、それらのレイヤーにウィジェットをアタッチして、必要なものを実現することができます。それはあなたがこれを達成するための最良の方法かもしれません。 Orchardのドキュメントで、これを行う方法の例を参照してください。

私はカスタムコントローラーと多くのカスタムロジックを使用する前に同様のことをしました。私の特定の要件のために、ウィジェットとレイヤーはこのためには機能しません。ページのすべてのコンテンツは、いくつかの入力に応じて変更する必要があり、ウィジェットやレイヤーはこれに適していませんでした。私がしたのは、カスタムコントローラとそれに対応する優先度の高いルートを作成することでした(ルートはホームページになりたい他のものよりも優先されます)。私はIHomePageProviderをまったく使いませんでした。コントローラのアクションで

は、私は必要なデータを引っ張って、私が望んでいた形を作成し、このような結果が返されました: return new ShapeResult(this, homePageShape);

homePageShapeが右returnステートメントの前に、このように構成されています

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

これにより、CustomHomeという図形が作成され、orchardはモジュールのviewsフォルダにあるCustomHome.cshtmlというテンプレートを自動的に探します。

いくつかの図形を作成しました(上記の「someShapeX」のすべての図形)。主に、コンテンツ部分からBuildDisplay()メソッドを使用して作成されます。 (この例では、スライドショーの形状のためである)このように、コンテンツ部分がIContentManagerを使用して照会され、形状が作成されます。

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

あなたがするかどうかに依存する図形を構築するために、コントローラのロジックを置くことができますかユーザーはログインしていません.CustomHome.cshtmlでは、次のような図形をレンダリングします。

 @Display(Model.SomeShape1) 
+0

すばらしい答え、ありがとう!それを試してみると、それが私のために働く場合は答えとしてマーク:) –

関連する問題