クロスポスト: https://orchard.codeplex.com/discussions/459007
最初の質問は、2 つの異なるモジュールで同じパーツに対して 2 つの PartHandlers を使用すると、どのような影響があるかということです。
特定のコンテンツ タイプが作成されたらメソッドを実行する必要があるため、この苦境に陥りました。その部分を OnCreated にフックするのは簡単ですが、私のシナリオは次のとおりです。
- モジュール A には、パーツと元のハンドラーが含まれています
- モジュール B には、メソッドが存在するサービスが含まれています。
- モジュール B にはモジュール A への参照があります
したがって、モジュール A 内でモジュール B を参照できません (循環参照)。そこで私がしたことは、まったく同じ PartHandler をモジュール A にコピーし、それをモジュール B に配置することでした。
それで何か問題がありますか?
次に 2 番目の質問があります。これでこれらすべての問題を解決できると思います。コンテンツ アイテムのデフォルトのコンテンツ パーツの PartHandler を作成できますか? (つまり、すべてのカスタム フィールドが接続されている部分)
そこで実行する必要があるものを統合できるので、これは間違いなく物事を簡単にするでしょう.
UPDATE 1(質問2をよりよく説明するため)
ContentDefinitionManager.AlterPartDefinition("EventItem",
builder => builder
.WithField("StartDate", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("Start Date")
.WithSetting("DateTimeFieldSettings.Display", "DateOnly")
.WithSetting("DateTimeFieldSettings.Required", "true"))
.WithField("StartTime", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("Start Time")
.WithSetting("DateTimeFieldSettings.Display", "TimeOnly"))
.WithField("EndDate", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("End Date")
.WithSetting("DateTimeFieldSettings.Display", "DateOnly"))
.WithField("EndTime", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("End Time")
.WithSetting("DateTimeFieldSettings.Display", "TimeOnly"))
.WithField("Intro", cfg => cfg
.OfType("TextField")
.WithDisplayName("Intro")
.WithSetting("TextFieldSettings.Flavor", "textarea"))
ContentDefinitionManager.AlterTypeDefinition(
"EventItem"
, cfg =>
cfg
.DisplayedAs("Event Item")
.WithPart("TitlePart")
.WithPart("EventItem")
.WithPart("LocationPart")
.WithPart("AutoroutePart", builder => builder
.WithSetting("AutorouteSettings.AllowCustomPattern", "true")
.WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "false")
.WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Title', Pattern: 'learn/events/{Content.Slug}', Description: 'learn/events/event-title'}]")
.WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
.WithPart("CommonPart")
.Draftable()
.Creatable()
);
すべてのカスタム フィールドを保持する EventItem パーツの ContentHandler を作成することについて話しているのです。EventItemPart がソリューション内のどのクラスでも定義されていない場合、どうすればよいですか?
クラス EventItemPart が見つからないため、以下は機能しません。
OnCreated<EventItemPart>((context, keynotes) =>
questionService.SetDefaultQuestions(context.ContentItem));