【问题标题】:Adding a Field to a ContentType in a Orchard DataMigration在 Orchard 数据迁移中向内容类型添加字段
【发布时间】:2013-01-28 18:41:18
【问题描述】:

我在数据迁移中创建了一个 ContentType,它将多个 ContentPart 焊接在一起。

在 Orchard Site Content Admin 上,我可以将字段添加到 ContentType(但不是 ContentPart),而在数据迁移中,似乎只能将字段添加到 ContentPart(而不是 ContentType)。

我想在迁移中将该字段添加到 ContentType,以便我可以使用placement.info 控制它的放置。

也许这并不重要,还有另一种方法可以实现在迁移中添加字段,然后能够使用placement.info 控制它的放置位置以及使用模板的外观。

【问题讨论】:

    标签: orchardcms


    【解决方案1】:

    您实际上不能将字段附加到内容类型。当您将其附加到管理 UI 中的内容类型时,Orchard 会在幕后使用一些魔法来向您隐藏这一事实——它在该内容类型内创建一个与内容类型同名的内容部分,然后附加该新内容部分的字段。

    您可以通过管理 UI 附加一个字段来验证这一点,然后转到导入/导出,并导出您的内容类型的元数据。

    要通过迁移附加字段,请执行相同的操作。如果您没有作为附加字段的好地方的内容部分,我使用的约定是创建一个与内容类型同名的内容部分,错误后缀为“部分”。假设您的内容类型是“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()
    );
    

    所有字段都附加到部件,而不是类型,因此您自然可以使用这种迁移方法使用placement.info 和模板来控制放置,就像您通过 UI 定义字段一样。

    【讨论】:

    • 谢谢,这有助于理解。对于您的上述示例,placement.info 会是什么样子?如果 VideoGamePart 中有两个字段,您是否仍然可以单独放置它们?
    • 在此答案的帮助下发现了如何将它们分开放置:stackoverflow.com/a/13809514/31569
    • 您不需要在它后面加上“Part”。部件名称和内容类型必须完全相同。
    • 是的...您应该使用相同的名称,否则如果您想更改某些内容,以后在编辑字段时会遇到问题。
    猜你喜欢
    • 2013-10-13
    • 2010-11-20
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多