11

I've created a ContentType in my data migration that welds several ContentParts together.

On the Orchard Site Content Admin I can add a field to the ContentType (but not a ContentPart), and in the data migration it only seems possible to add a field to a ContentPart (and not a ContentType).

I would like to add the field to the ContentType in the migration, so I can control it's placement using placement.info.

Perhaps that's not important, and there is another way to achieve adding a field in the migration and then being able to control where it is placed using placement.info and how it looks using a template.

4

1 に答える 1

14

実際には、フィールドをコンテンツ タイプに添付することはできません。管理 UI でコンテンツ タイプにアタッチすると、Orchard はバックグラウンドで魔法を実行して、この事実を隠します。コンテンツ タイプと同じ名前で、そのコンテンツ タイプ内にコンテンツ パーツを作成し、アタッチします。その新しいコンテンツ部分へのフィールド。

これを確認するには、管理 UI を介してフィールドをアタッチし、[インポート/エクスポート] に移動して、コンテンツ タイプのメタデータをエクスポートします。

移行を介してフィールドをアタッチするには、同じことを行います。フィールドを添付するのに適したコンテンツ パーツがない場合、私が使用する規則は、コンテンツ タイプと同じ名前でバグの末尾に "Part" を付けたものを作成することです。コンテンツ タイプが「VideoGame」であるとします。

ContentDefinitionManager.AlterPartDefinition(
    "VideoGamePart"
    , b => b
        .Attachable()
        .WithField("ThumbnailImage", cfg => cfg.OfType("MediaPickerField").WithDisplayName("Video game box cover image"))
);
// Type: 
ContentDefinitionManager.AlterTypeDefinition(
    "VideoGame"
    , cfg =>
        cfg
            .WithPart("VideoGamePart")
            .WithPart("IdentityPart")
            .WithPart("TitlePart")
            .WithPart("CommonPart")
            .Creatable()
);

すべてのフィールドはタイプではなくパーツに関連付けられているため、UI を介してフィールドを定義する場合と同様に、この移行方法を使用して、placement.info とテンプレートを使用して配置を自然に制御できます。

于 2013-01-28T21:38:12.647 に答える