Wie entferne ich Variablen aus der Variablentabelle, wenn mein Modul deinstalliert wird?

7

Ich arbeite an einem Drupal 6-Modul, das der Variablentabelle einige Variablen hinzufügt. Wie kann ich vorgehen, um diese Variablen aus der Variablentabelle zu entfernen, wenn das Modul deinstalliert wird?

Jim
quelle

Antworten:

13

Behalten Sie Ihre Variablen im Auge und fügen Sie geeignete variable_del()Aufrufe innerhalb einer Implementierung von hook_uninstall():

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

Wie hook_uninstall()ein Installations-Hook muss er sich in der .installDatei Ihres Moduls befinden (z foo.install. B. ).

Sie sollten nicht alle Variablen löschen, denen der Name Ihres Moduls vorangestellt ist, da Namespace-Kollisionen zurückkehren und Sie beißen. Wenn der Name Ihres Moduls beispielsweise lautet foo, sollten Sie die variablesTabelle nur nach allen Variablen mit Präfix abfragen foo_. Aber was ist, wenn ich ein Modul mit dem Namen schreibe foo_awesome? Sie würden auch meine Variablen löschen. Das wäre nicht schön.


quelle
2

UPDATE: Als ich die Diskussion in diesem Blog-Beitrag weiter durchgesehen habe , bin ich auf diese Idee von Dave Reid gestoßen, um die Methode zu übernehmen, die Drupal Core verwendet .

Matt V.
quelle
Dadurch werden auch Variablen für andere Module wie "examplemodule_extreme" gelöscht.
@ Mark Trapp: Ja, darüber wird in den Kommentaren zum Beitrag diskutiert. Ich habe meine Antwort mit einem Link zu einer besseren Idee in dieser Diskussion aktualisiert.
Matt V.
1
@Matt Ich würde immer noch misstrauisch sein, einen neuen, generischen Hook wie diesen zu verwenden, aus Angst vor einer Namespace-Kollision, aber das ist definitiv eine bessere Alternative. Und um klar zu sein, die Methode, die Dave Reid verwendet (implementiert hook_variables()), ist nicht die Kernmethode: So macht er es in einigen seiner eigenen Module. In Drupal 8 kann dieses Problem durch Hinzufügen eines hook_variable_info()Kernhakens gelöst werden .
@ Mark Trapp: Ja, ich bin davon ausgegangen, dass Core es so gemacht hat, basierend auf dem Thema von Marks Antwort. Ich habe allerdings ein bisschen gegraben und war überrascht, dass einige Kernmodule hook_uninstall noch gar nicht implementieren.
Matt V.
2
Nun, einige Kernmodule haben möglicherweise keine Variablen und einige sind erforderlich und können nicht wie Knoten und Benutzer deinstalliert werden. Daher ist es für diese sinnlos, hook_uninstall () zu implementieren. Es ist jedoch durchaus möglich, dass einige Variablen auch im Core nicht korrekt deinstalliert werden. Es ist etwas, das leicht vergessen wird. Ich habe selbst viele Stunden investiert , um hook_variable_info () in den Kern zu bekommen, aber das wird mit dem aktuellen Variablensystem einfach nicht passieren, es macht es zu komplex und zu langsam.
Berdir