Pro*_*ofK 3 content-management-system orchardcms
我想在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;
}
Run Code Online (Sandbox Code Playgroud)
禁用模块时删除此内容类型将是棘手的部分,因为它可能是用户意外的.也许"套餐"是他们仍然希望使用附加不同部分的类型.此外,如果他们手动删除您的模块而不禁用,则无法真正编写代码来响应该事件.我所知道的唯一可靠的是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){}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2250 次 |
| 最近记录: |