在Orchard CMS中以编程方式创建内容类型

本文关键字:创建 类型 方式 编程 Orchard CMS | 更新日期: 2023-09-27 18:12:38

我正在创建一个Orchard模块,作为迁移的一部分,我需要创建一个新的内容类型。我能够注入一个实例的IContentManager到我的迁移类,它允许我创建新的内容项,但我还没有能够弄清楚如何创建一个新的内容类型。

谁能描述一下这是如何完成的(代码示例将是伟大的)?

在Orchard CMS中以编程方式创建内容类型

您不需要注入内容管理器。代码中有很多很多这样的例子。实际上,您可以在任何模块中进行几乎任何迁移,并找到这样的内容:

ContentDefinitionManager.AlterTypeDefinition("BlogPost",
    cfg => cfg
           .WithPart("BlogPostPart")
           .WithPart("CommonPart", p => p
           .WithSetting("DateEditorSettings.ShowDateEditor", "true"))
           .WithPart("PublishLaterPart")
           .WithPart("RoutePart")
           .WithPart("BodyPart")
);

好了,这里有另一个部件和内容类型定义的示例。

// PART DEFINITION
ContentDefinitionManager.AlterPartDefinition("ProductPart", p => p
.WithDescription("Product part")
    // To select other contents ( on this example "ProductPresentation" content type )
.WithField("ProductPresentation", f => f
    .OfType("ContentPickerField")
    .WithDisplayName("Product presentation")
    .WithSetting("ContentPickerFieldSettings.Required", "True")
    .WithSetting("ContentPickerFieldSettings.Multiple", "True")
    .WithSetting("ContentPickerFieldSettings.ShowContentTab", "True")
    .WithSetting("ContentPickerFieldSettings.Hint", "Please select product's presentation")
    .WithSetting("ContentPickerFieldSettings.DisplayedContentTypes", "ProductPresentation")
)
// To select images
.WithField("ProductImageField", f => f
    .OfType("MediaLibraryPickerField")
    .WithDisplayName("Product image")
    .WithSetting("MediaLibraryPickerFieldSettings.Hint", "Please select product's image")
    .WithSetting("MediaLibraryPickerFieldSettings.Required", "True")
    .WithSetting("MediaLibraryPickerFieldSettings.Multiple", "False")
)
// To add a taxonomy field called "ProductLines"
.WithField("Category", fcfg => fcfg
    .OfType("TaxonomyField")
    .WithDisplayName("Category")
    .WithSetting("TaxonomyFieldSettings.Taxonomy", "ProductLines")
    .WithSetting("TaxonomyFieldSettings.LeavesOnly", "True")
    .WithSetting("TaxonomyFieldSettings.Required", "True")
    .WithSetting("TaxonomyFieldSettings.SingleChoice", "False")
    .WithSetting("TaxonomyFieldSettings.Autocomplete", "False")
    .WithSetting("TaxonomyFieldSettings.AllowCustomTerms", "False")
    .WithSetting("TaxonomyFieldSettings.Hint", "Please select product's category")
    )
.Attachable()
);

// CONTENT TYPE DEFINITION
ContentDefinitionManager.AlterTypeDefinition("Product", cfg => cfg
                .DisplayedAs("Product")
                .WithPart(
                    "CommonPart", c => c
                        .WithSetting("DateEditorSettings.ShowDateEditor", "False")
                        .WithSetting("OwnerEditorSettings.ShowOwnerEditor", "False")
                    )
                    .WithPart("ProductPart")
                    .WithPart("TitlePart", c => c.WithSetting("Hint", "Please enter the product name"))
                    .WithPart("BodyPart", c => c.WithSetting("Hint", "Please enter the product description"))
                    .WithPart("LocalizationPart")
                    .WithPart("AutoroutePart", partBuilder => partBuilder
                    .WithSetting("AutorouteSettings.AllowCustomPattern", "true")
                    .WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "true")
                    .WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Product Title', Pattern: 'product/{Content.Slug}', Description: 'product/title-product'}]"))
                .Listable()
                .Draftable()
                .Creatable()
                .Securable()
                .Indexed()
                );
相关文章: