モジュールをアンインストールするときに、変数テーブルから変数を削除するにはどうすればよいですか?


7

私はいくつかの変数を変数テーブルに追加するDrupal 6モジュールに取り組んでいます。モジュールをアンインストールするときに、これらの変数を変数テーブルから削除するにはどうすればよいですか?

回答:


13

変数を追跡variable_del()し、の実装内に適切な呼び出しを追加しますhook_uninstall()

function foo_uninstall() {
  variable_del('foo_variable1');
  variable_del('foo_variable2');
}

hook_uninstall()インストールフックと同様に、モジュールの.installファイル(などfoo.install)に存在する必要があります。

名前空間の衝突があなたに噛み付くように戻ってくるので、モジュール名が前に付いているすべての変数を削除するべきではありません。たとえば、モジュールの名前がの場合foovariablesテーブルの前にが付いてfoo_いるすべての変数をポーリングするだけでよいと考えるかもしれません。しかし、という名前のモジュールを作成するとfoo_awesomeどうなりますか?私の変数も削除します。それはいいことではありません。


2

更新:このブログ投稿の議論をさらに掘り下げてみると、Drupalコアが使用する方法採用するために、 Dave Reidからこのアイデアに出くわしました。


これにより、「examplemodule_extreme」などの他のモジュールの変数も削除されます。

@Mark Trapp:ええ、そのコメントは投稿のコメントにあります。そのディスカッションでより良いアイデアへのリンクを使用して、回答を更新しました。
マットV.

1
@マット名前空間の衝突を恐れて、そのような新しい汎用的なフックを使用することについては、私はまだおもしろくないでしょうが、それは間違いなくより良い代替手段です。明確にするために、Dave Reidが使用する(を実装するhook_variables())メソッド、コアがそれを行う方法ではありません。それは、彼が自分のいくつかのモジュールで行う方法です。Drupalの8では、この問題はで解決されるかもしれないコアの添加hook_variable_info()フック

@Mark Trapp:ええ、私はコアがマークの返答の主題に基づいてそのようにそれをしたと仮定しました。私は少し掘り下げましたが、かなりの数のコアモジュールがまだhook_uninstallをまだ実装していないことに気づいて驚いた。
マットV.

2
まあ、いくつかのコアモジュールは変数を持たない可能性があり、いくつかは必須であり、ノードやユーザーのようにアンインストールできません。したがって、これらがhook_uninstall()を実装しても意味がありません。とはいえ、コアによっても一部の変数が正しくアンインストールされない可能性は十分にあります。それは簡単に忘れられるものです。私は自分でhook_variable_info()をコアに入れようとして時間費やしましたが、それは現在の変数システムでは起こり得ず、複雑すぎて遅すぎます。
Berdir 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.