2010-12-29 23 views
1

モジュールを有効にするときにテーブルを作成するカスタムモジュール用のスキーマをインストールしました。しかし、私がモジュールを無効にすると、テーブルはまだ残っています。私はアンインストールに次のコードを使用しています:モジュールが無効になっているときにhook_schema()がアンインストールされない

function sample2_install() { 
    if(!db_table_exists('contact')){ 
    drupal_install_schema('sample2'); 
    } 
} 

function sample2_uninstall() { 
    drupal_uninstall_schema('sample2'); 
} 

テーブルがアンインストールされないのはなぜですか?

答えて

6

ここでは、無効とアンインストールの違いがあります。無効にすると、再設定されるたびにモジュールの設定が進行します。アンインストールすると、再度有効になるまですべて消去されます。

hook_uninstall()は、モジュールを完全にアンインストールしたときにのみ呼び出されます。
hook_disable()は、無効にすると呼び出されます。

hook_disable()の場合はdrupal_uninstall_schema()に電話することができますが、お勧めしません。モジュールを無効にすると、すべてのデータが削除されます。一般に、すべてを完全に削除したい場合はアンインストールが必要です。

+0

モジュールを無効にするたびにテーブルをアンインストールする必要がある場合は、どうすればいいですか?私が推測しているのは、hook_uninstallはモジュールを無効にしているので決して呼び出されないということです。 – user550265

+1

@ user550265モジュールが無効になっているときは、テーブルを削除しないでください。これが無効化の全ポイントです。つまり、データが漏洩していないということです。アンインストールとディセーブル化の唯一の(そして唯一の)違いは、最初の(取消不能な)データが削除され、最後のデータは削除されないことです。 – berkes

+1

モジュールが無効になっているときにすべてのデータを削除したい場合は、あなたの呼び出しにdrupal_uninstall_schemaを追加するだけです。hook_disable。私はDrupalモジュールの通常の動作ではないので、このアプローチには反対します。モジュールをwww.yoursite.com/admin/build/modules/uninstall – anschauung