ゾーンでテーマを作成してから、@ Display.Shape()を実行するだけで、モジュールからそのゾーンにシェイプを送信できるため、何かが私の頭の中でつながっていません。したがって、BuildDisplayShape
をオーバーライドするためにハンドラを使用することが絶対に必要な場合、私は不思議です。
これは、プレーンなレコード(ContentItemまたはContentPartを使用せず、それらを使用していない場合でも、マイグレーションを通じて1つのレコードを作成する例を示しています)としてモデルを使用する場合です。このような
何か - コントローラー:
public ShapeResult MyShape()
{
var shape = _orchardServices.New.MyPath1_MyShape();
return new ShapeResult(this, shape);
}
は、その後、私は持っているものは何でもコードでMyShape.cshtml形状(例えば不要)を作成します。
注:「ビュー」、「ビュー/アイテム」、「ビュー/パーツ」、「ビュー/フィールド」を使用する代わりに、形状を保存できるパスを追加するカスタムIShapeTemplateHarvester
ファイルを使用します。オーチャードの株式)。これは次のようなものです:
注:私はそのコードが自動的には囲まれないことを嫌います。
[OrchardSuppressDependency("Orchard.DisplayManagement
.Descriptors.ShapeTemplateStrategy.BasicShapeTemplateHarvester")]
public class MyShapeTemplateHarvester : BasicShapeTemplateHarvester,
IShapeTemplateHarvester
{
public new IEnumerable<string> SubPaths()
{
var paths = base.SubPaths().ToList();
paths.Add("Views/MyPath1");
paths.Add("Views/MyPath2");
return paths;
}
}
は私が私のテーマでIndex.cshtmlを持っていると言います。 2つの選択肢があります(私は両方を使い、デフォルトのプレゼンテーションとしてThemeを使います)。
@*Default Content*@
Index.cshtmlモジュールフォルダ内:テーマフォルダ内の
Index.cshtml
@*Special Content overriding Theme's Index.cshtml*@
Display.MyPath1_MyShape()
私はテーマフォルダにIndex.cshtmlでこれを行うことができるということです私のためにさらに良いです:
@*Whatever content*@
Display.MyPath1_MySecondShape()
The /テーマにはMyPath1/ule、テーマが表示されます!私は特別なテーマを持つことができ、複数のモジュール(別々のサイトに配置されている)をテーマにして前後に移動することができます(別のサイトの同じ職種で異なるサービスについてダッシュボードを考える)。
注:
public class MyThemeSelector : IThemeSelector
{
public ThemeSelectorResult GetTheme(RequestContext context)
{
if (MyFilter.IsApplied(context))
{
return new ThemeSelectorResult { Priority = 200,
ThemeName = "MyDashboard" };
}
return null;
}
}
ちょうど私の2つのビット:上記だけのようなIThemeSelector
実装してもよいです。
特定の理由でウィジェットを使用してフォームをフロントエンドに配置する必要がありますか、シェイプを使用できますか?ウィジェットから、部分ビューで@ Html.RenderPartial()を呼び出すことができます。それはかなり簡単なようです(多分私が紛失しているものがあります)。あなたが立ち往生していることや質問がある特定の部分はありますか?オーチャード・ドックのウィジェット作成情報を見ましたか? –
いいえ、ウィジェットである必要はありません。私は問題を解決するためにどのようにシェイプを使用するのか分かりません。 ウィジェットの作成に関するオーチャード・ドックと他のチュートリアルを紹介しました。それらのすべては、私があなたが示唆したように見つけたものを除いて、コンテンツ部分にウィジェットの基盤を置いています。 @ Url.Action( "GetServices"、 "Appointment")が間違ったパスを返すため、@ Html.RenderPartial()を使用しようとしましたが、ビューをレンダリングしている間にキーAjaxの一部の呼び出しが壊れています:http:// localhost :30320/OrchardLocal/Contents/Appointment/GetServicesの代わりに:http:// localhost:30320/OrchardLocal/ServiceManager/GetServices –
ルートを指定して、@ Url.RouteUrl()を使用して、簡単に目的のルートを強制してください。 –