我想在 Orchard 1.6 中创建一个自定义包内容类型。我已经有了一个内容部分,它代表了一个包的整个数据库记录和 UI,但现在我想知道我是否正确地处理了这个问题。
在我看来,下一步是使用 Orchard 仪表板创建一个新的内容类型,并将我的自定义内容部分添加到该类型中。但是,内容类型是 Orchard 内部的,依赖于托管内容部分的我的“外部”模块。我怎样才能使我的内容类型仅在我的模块启用时才可用?
我想在 Orchard 1.6 中创建一个自定义包内容类型。我已经有了一个内容部分,它代表了一个包的整个数据库记录和 UI,但现在我想知道我是否正确地处理了这个问题。
在我看来,下一步是使用 Orchard 仪表板创建一个新的内容类型,并将我的自定义内容部分添加到该类型中。但是,内容类型是 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){}
}