如何在Orchard模块中创建自定义内容类型?

时间:2012-12-06 10:23:54

标签: content-management-system orchardcms

我想在Orchard 1.6中创建自定义包内容类型。我已经有一个内容部分代表一个包的整个数据库记录和UI,但现在我想知道我是否正确地进行此操作。

在我看来,下一步是使用Orchard仪表板创建新的内容类型,并将我的自定义内容部分添加到该类型中。但是,内容类型是Orchard的内部类型,依赖于托管内容部分的“外部”模块。如何才能使我的内容类型仅在启用模块时可用?

1 个答案:

答案 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){}
}