【发布时间】:2012-12-04 17:49:04
【问题描述】:
我希望能够在我的本地环境中以编程方式禁用并卸载模块,然后轻松将该代码推送到 prod,以便更新所有内容。
我猜这与hook_update_N 有关。但不确定从哪里开始。
【问题讨论】:
标签: php drupal drupal-7 drupal-modules
我希望能够在我的本地环境中以编程方式禁用并卸载模块,然后轻松将该代码推送到 prod,以便更新所有内容。
我猜这与hook_update_N 有关。但不确定从哪里开始。
【问题讨论】:
标签: php drupal drupal-7 drupal-modules
我想我找到了答案!在模块 .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
【讨论】:
在 Drupal 8 中,这只是一步。
要放在MYMODULE.install里面:
/**
* Uninstall Field UI.
*/
function MYMODULE_update_8001(&$sandbox) {
\Drupal::service('module_installer')->uninstall(['field_ui']);
}
【讨论】:
在 Drupal 8 中,您可以使用配置 API 来启用和禁用模块。
例如,如果要启用开发模块。您必须将以下代码添加到 core.extension.yml
devel: 0
如果要卸载,必须从 core.extension.yml 中删除 devel: 0
【讨论】:
drush cex。然后你的步骤。然后第 3 步:重新导入配置 drush cim。但实际上这不是 OP 所要求的。问题是:以编程方式。
您可以使用 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();"
【讨论】: