3

Orchard 1.6 でカスタム パッケージ コンテンツ タイプを作成したいと考えています。パッケージの db レコード全体と UI を表すコンテンツ パーツを既に持っていますが、これについて正しく行っているかどうか疑問に思っています。

次のステップは、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 に答える