3

我想在 Orchard 1.6 中创建一个自定义包内容类型。我已经有了一个内容部分,它代表了一个包的整个数据库记录和 UI,但现在我想知道我是否正确地处理了这个问题。

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

4

1 回答 1

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){}
}
于 2012-12-06T15:57:28.837 回答