Content management system 如何创建自定义内容类型作为Orchard模块的一部分?
我想在Orchard 1.6中创建一个自定义包内容类型。我已经有了一个内容部分,它代表了一个包的整个db记录和UI,但是现在我想知道我是否正确地处理了这个问题Content management system 如何创建自定义内容类型作为Orchard模块的一部分?,content-management-system,orchardcms,Content Management System,Orchardcms,我想在Orchard 1.6中创建一个自定义包内容类型。我已经有了一个内容部分,它代表了一个包的整个db记录和UI,但是现在我想知道我是否正确地处理了这个问题 在我看来,下一步是使用Orchard dashboard创建新的内容类型,并将自定义内容部分添加到该类型中。但是,内容类型是Orchard内部的,依赖于托管内容部分的“外部”模块。如何使我的内容类型仅在启用模块时可用?为方便起见,您可以在模块中的迁移过程中创建内容类型。这将仅在启用时运行。它看起来像这样 //Inside of yo
在我看来,下一步是使用Orchard dashboard创建新的内容类型,并将自定义内容部分添加到该类型中。但是,内容类型是Orchard内部的,依赖于托管内容部分的“外部”模块。如何使我的内容类型仅在启用模块时可用?为方便起见,您可以在模块中的迁移过程中创建内容类型。这将仅在启用时运行。它看起来像这样
//Inside of your migration file...
public int UpdateFrom1(){
ContentDefinitionManager.AlterTypeDefinition("Package", cfg=> cfg
.Creatable()
.WithPart("YourCustomPart")
.WithPart("CommonPart")
.WithPart("Whatever other parts you want..."));
return 2;
}
禁用模块时删除此内容类型将是一个棘手的部分,因为用户可能会有点意外。也许“包”是一种他们仍然想使用的类型,附带不同的部件。此外,如果他们在不禁用的情况下手动删除您的模块,您就无法编写代码来响应该事件。据我所知,唯一可靠的是IFeatureEventHandler。这将允许您删除您的内容类型,如果他们禁用管理中的模块
public PackageRemover : IFeatureEventHandler {
private readonly IContentDefinitionManager _contentDefinitionManager;
public PackageRemover(IContentDefinitionManager contentDefinitionManager){
_contentDefinitionManager = contentDefinitionManager;
}
public void Installed(Feature feature){}
public void Enabling(Feature feature){}
public void Enabled(Feature feature){}
public void Disabling(Feature feature){
_contentDefinitionManager.DeleteTypeDefinition("Package");
}
public void Disabled(Feature feature){}
public void Uninstalling(Feature feature){}
public void Uninstalled(Feature feature){}
}
谢谢你,布兰登。我可以从您的第一段代码摘录中假设
AlterTypeDefinition
将添加不存在的类型吗?