我想在Orchard 1.6中创建自定义包内容类型。我已经有一个内容部分代表一个包的整个数据库记录和UI,但现在我想知道我是否正确地进行此操作。
在我看来,下一步是使用Orchard仪表板创建新的内容类型,并将我的自定义内容部分添加到该类型中。但是,内容类型是Orchard的内部类型,依赖于托管内容部分的“外部”模块。如何才能使我的内容类型仅在启用模块时可用?
答案 0 :(得分:5)
为方便起见,您可以创建内容类型作为模块中某个迁移的一部分。这只会在启用时运行。它看起来像这样......
//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){}
}