Orchardcms 在所有租户上启用Orchard模块,而无需手动执行此操作。

Orchardcms 在所有租户上启用Orchard模块,而无需手动执行此操作。,orchardcms,Orchardcms,目前正在运行一个拥有100多个租户的站点,并且必须手动启用所有模块。是否有一种方法可以跨所有my租户启用orchard中的所有模块,而无需转到每个站点并单击“启用”或使用命令提示符手动启用。我在将内容部署到多个站点时也遇到了同样的问题。我的设置是独一无二的,我为每个租户提供了不同的数据库 下面是我如何从模块的迁移类中启用/禁用功能的示例。您可以做的是创建一个命令行实现(从DefaultOrchardCommandHandler继承),该实现将向所有租户扇出您的启用/禁用模块命令 我不确定租户系统

目前正在运行一个拥有100多个租户的站点,并且必须手动启用所有模块。是否有一种方法可以跨所有my租户启用orchard中的所有模块,而无需转到每个站点并单击“启用”或使用命令提示符手动启用。我在将内容部署到多个站点时也遇到了同样的问题。我的设置是独一无二的,我为每个租户提供了不同的数据库

下面是我如何从模块的迁移类中启用/禁用功能的示例。您可以做的是创建一个命令行实现(从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 });
        }
    }
}
[usedimplicity]
公共类迁移:DataMigrationImpl{
public int UpdateFrom2(){
var features=_moduleService.GetAvailableFeatures().ToDictionary(m=>m.Descriptor.Id,m=>m);
禁用特征(特征,“TinyMce”);
启用功能(功能,“TinyMceDeluxe”);
EnableFeature(特性“Contrib.Cache”);
EnableFeature(功能,“WebAdvanced.Sitemap”);
返回3;
}
私有void DisableFeature(字典功能、字符串功能ID){
if(features.ContainsKey(featureId)和&features[featureId].IsEnabled){
_moduleService.DisableFeatures(新字符串[]{featureId});
}
}
私有void启用功能(字典功能、字符串功能ID){
if(features.ContainsKey(featureId)&&!features[featureId].IsEnabled){
_EnableFeatures(新字符串[]{featureId});
}
}
}

否否,命令行上的所有命令都采用a/t:可选参数,可指定特定租户。结合CLI运行批处理的功能,您就得到了答案。@Bertrand,是的,这已经包含在我的答案中了。这就是为什么我说,根据console Orchard会话是否特定于租户,您可以在Commands类中进行扇形操作,也可以从命令行进行扇形操作。是的,我只是回答了不确定性:)Bertrand,您对Orchard了解多少!:)