まず、ウィジェットとレイヤーを調べるとよいでしょう。認証されたユーザー用のレイヤーと匿名ユーザー用のレイヤーを定義し、それらのレイヤーにウィジェットをアタッチして、必要なものを実現することができます。それはあなたがこれを達成するための最良の方法かもしれません。 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)
すばらしい答え、ありがとう!それを試してみると、それが私のために働く場合は答えとしてマーク:) –