2

現在、100 以上のテナントを持つサイトを実行しており、すべてのモジュールを手動で有効にする必要があります。すべてのテナントでオーチャードのすべてのモジュールを有効にする方法はありますか?各サイトに移動して [有効にする] をクリックするか、コマンド プロンプトを手動で使用する必要はありません。コンテンツを複数のサイトに展開する際にも同じ問題が発生しています。私のセットアップは、テナントごとに異なるデータベースがある場所に固有です。

4

1 に答える 1

1

以下は、モジュールの移行クラスの機能を有効/無効にする方法の例です。できることは、すべてのテナントにモジュールの有効化/無効化コマンドをファンアウトするコマンドライン実装(DefaultOrchardCommandHandlerから継承)を作成することです。

コマンドラインに関してテナントシステムがどのように機能するかはわかりません。テナントごとに個別のコマンドラインbin\orchard.exeセッションを起動する必要があると思います。その場合は、bin\orchard.exeを呼び出すスクリプトでファニングを実行できます。bin \ orchard.exeの単一セッションからさまざまなテナントに対してテナント固有のコマンドを実行できる場合は、Commandsクラス内でファニングを実行できます。

[UsedImplicitly]
public class Migrations : DataMigrationImpl {

    public int UpdateFrom2() {
        var features = _moduleService.GetAvailableFeatures().ToDictionary(m=>m.Descriptor.Id, m=>m);

        DisableFeature(features, "TinyMce");
        EnableFeature(features, "TinyMceDeluxe");
        EnableFeature(features, "Contrib.Cache");
        EnableFeature(features, "WebAdvanced.Sitemap");

        return 3; 
    }

    private void DisableFeature(Dictionary<string, Orchard.Modules.Models.ModuleFeature> features, string featureId) {
        if (features.ContainsKey(featureId) && features[featureId].IsEnabled) {
            _moduleService.DisableFeatures(new string[] { featureId });
        }
    }

    private void EnableFeature(Dictionary<string, Orchard.Modules.Models.ModuleFeature> features, string featureId) {
        if (features.ContainsKey(featureId) && !features[featureId].IsEnabled) {
            _moduleService.EnableFeatures(new string[] { featureId });
        }
    }
}
于 2013-01-07T19:50:08.930 に答える