18

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

我猜它与hook_update_N. 但不确定从哪里开始。

4

4 回答 4

46

想我找到了答案!在模块 .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

于 2012-12-04T17:49:04.207 回答
8

Drupal 8

在 Drupal 8 中,这只是一步。

放置在里面MYMODULE.install

/**
 * Uninstall Field UI.
 */
function MYMODULE_update_8001(&$sandbox) {

  \Drupal::service('module_installer')->uninstall(['field_ui']);

}
于 2017-10-10T11:51:50.040 回答
1

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

于 2018-05-03T07:04:30.803 回答
0

您可以使用 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();"
于 2022-02-09T07:35:22.213 回答