2

Orchard CMS を使用してサイトを構築し、独自のカスタム モジュールを作成しています。私はいくつかのチュートリアルに従っていますが、これまでのところとても良いです。

.ShapeHelper() メソッドがどのように機能するのか理解できず、少し困っています。

私の Driver ファイルからの次のコードは、完全に正常に動作し、フロントエンドでビューを生成します。

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.DisplayTemplate(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }

ただし、他のチュートリアルDisplayTemplateで、パーツ/ビューの名前ではなく、代わりに使用されることを見てきました..これは、特にシェイプ トレーシング モジュールを使用するときに、「DisplayTemplate」を見て少し混乱するので、私が望むものです (下の画像..) より認識しやすい名前ではなく

ここに画像の説明を入力

私は単に私の方法を次のように変更しようとしました:

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.Parts_SubscribersForm(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }
  • 「Parts_SubscribersForm()」に注意してください-これを行うと、次のエラーが発生します...

ここに画像の説明を入力

ビューが配置されている場所に関係していると思いますが、オーチャードが必要とする正しいフォルダーにビューがあるとも信じています。これは、私のビューが関係するフォルダー構造です...

ここに画像の説明を入力

「DisplayContent」ではなく、shapeHelper メソッドでパーツ名を使用できる場所を教えてください。

4

1 に答える 1

7

表示テンプレートをViewsフォルダー ( /Views/Parts.SubscribersForm.cshtml) 内ではなく、フォルダー内に直接配置しますDisplayTemplates。Orchard は慣例により、Viewsシェイプ テンプレートを検索する場合にのみフォルダーをスキャンします。EditorTemplates一方、そのサブフォルダーには、パーツ エディター用のテンプレートが保持されます。ドライバーEditorメソッドから返された形状。

そのダイナミックなshapeHelperものは何ですか?要するに、これはシェイプ ファクトリです。あなたが呼び出すとき。の場合、テンプレートにshapeHelper.SomeShape(Foo: 1, Bar: "baz")対応する形状オブジェクトを返し、動的モデルにはプロパティとが含まれます。そのテンプレートは、モジュールまたはテーマのフォルダーのどこかに存在する必要があります。それは多かれ少なかれすべての魔法です。SomeShape.cshtmlFooBarViews

形状をさらに理解したい場合は、http: //docs.orchardproject.net/Documentation/Accessing-and-rendering-shapesが出発点として適しています。

于 2013-08-05T18:45:07.647 に答える