Drupal 当模块被禁用时,不会卸载hook_schema()

Drupal 当模块被禁用时,不会卸载hook_schema(),drupal,Drupal,我为自定义模块安装了一个模式,当我启用该模块时,该模式将创建表。但当我禁用模块时,表仍然保留。我正在使用以下代码进行卸载: 函数示例2\u安装(){ 如果(!db_table_存在('contact')){ drupal_安装_模式('sample2'); } } 函数sample2_uninstall(){ drupal_卸载_模式('sample2'); } 为什么没有卸载该表?这里的区别在于禁用和卸载。禁用可使模块设置在重新启用时随时准备就绪。卸载将清除所有内容,直到重新启用 仅在完全卸

我为自定义模块安装了一个模式,当我启用该模块时,该模式将创建表。但当我禁用模块时,表仍然保留。我正在使用以下代码进行卸载:

函数示例2\u安装(){
如果(!db_table_存在('contact')){
drupal_安装_模式('sample2');
}
}
函数sample2_uninstall(){
drupal_卸载_模式('sample2');
}

为什么没有卸载该表?

这里的区别在于禁用和卸载。禁用可使模块设置在重新启用时随时准备就绪。卸载将清除所有内容,直到重新启用

仅在完全卸载模块时调用。
仅在禁用它时调用


你可以在里面打电话,但我不建议这样。这意味着,当您禁用模块时,您的所有数据都会被删除—通常,卸载是指您希望完全删除所有内容。

因此,如果我需要在禁用模块时卸载表,我将如何执行此操作?我猜想,由于我只是在禁用模块,所以永远不会调用hook_uninstall。@user550265,当模块被禁用时,您不应该删除表。这就是禁用的全部意义:数据没有被核化。卸载和禁用之间唯一(也是唯一)的区别是,第一个(不可逆地)删除数据,最后一个不删除。如果您确实希望在禁用模块时删除所有数据,只需将drupal\u uninstall\u模式添加到调用挂钩\u disable。我反对这种方法,因为这不是Drupal模块的正常行为。您可以通过www.yoursite.com/admin/build/modules/uninstallOr卸载模块,您可以在hook\u disable内部调用module\u invoke('yourmodule','uninstall')。这将使禁用相当于卸载该特定模块。但是,您不会这么做,因为我们已经说服您,在模块被禁用时对其所有数据进行核处理是一个坏主意,对吗?这只是Drupal 7开发人员的注意事项:“模块不再应该在hook_install()或hook_uninstall()中显式安装或卸载其数据库架构”,请参阅: