【问题标题】:How to disable and uninstall a Drupal module programmatically?如何以编程方式禁用和卸载 Drupal 模块?
【发布时间】:2012-12-04 17:49:04
【问题描述】:

我希望能够在我的本地环境中以编程方式禁用并卸载模块,然后轻松将该代码推送到 prod,以便更新所有内容。

我猜这与hook_update_N 有关。但不确定从哪里开始。

【问题讨论】:

    标签: php drupal drupal-7 drupal-modules


    【解决方案1】:

    我想我找到了答案!在模块 .install 文件中,我添加了以下代码:

    /**
     * Disable and uninstall the module.
     */
    function MODULE_update_7200() {
      if( module_exists('MODULE')) {
        module_disable(array('MODULE'));
        drupal_uninstall_modules(array('MODULE'));
      }
    }
    

    函数中的数字应该反映您的 drupal 安装。在此处查看如何编号:http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_update_N/7

    【讨论】:

      【解决方案2】:

      Drupal 8

      在 Drupal 8 中,这只是一步。

      要放在MYMODULE.install里面:

      /**
       * Uninstall Field UI.
       */
      function MYMODULE_update_8001(&$sandbox) {
      
        \Drupal::service('module_installer')->uninstall(['field_ui']);
      
      }
      

      【讨论】:

      • 对于任何想知道的人,这也适用于 Drupal 9。即使以 800X 开始更新编号。
      【解决方案3】:

      在 Drupal 8 中,您可以使用配置 API 来启用和禁用模块。 例如,如果要启用开发模块。您必须将以下代码添加到 core.extension.yml devel: 0 如果要卸载,必须从 core.extension.yml 中删除 devel: 0

      【讨论】:

      • 这是第 2 步。第 1 步是先将其导出 drush cex。然后你的步骤。然后第 3 步:重新导入配置 drush cim。但实际上这不是 OP 所要求的。问题是:以编程方式
      • 在某些情况下,如果不先禁用更新挂钩中的模块,可能无法进行配置导入。
      【解决方案4】:

      您可以使用 drush 并强制卸载模块,如下所示:

      drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-17
        • 2019-08-05
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 2012-03-17
        • 2015-03-05
        相关资源
        最近更新 更多