Frage

Wie kann ich Hook_install () dazu bringen, alle Updates auszuführen, die ich für mein Modul habe? Ich habe eine Datei myMod.install.

Ich habe versucht

function mymod_install() {
  mymod_update_6001();
}

Aber es scheint nichts zu tun. Wenn ich einen MYMOD_UPDATE_6002 () habe, würde ich noch 6001 () anrufen, rufen Sie einfach 6002 () an oder rufen Sie beide in der Bestellung 6001 (), 6002 () an.

Ich dachte, es wäre gesunder Menschenverstand, alle Updates auszuführen, wenn Sie standardmäßig ein Modul installiert haben.

War es hilfreich?

Lösung

Sie sollten nicht Ihren Installation Hook dazu bringen, Updates auszuführen. Wenn zum ersten Mal ein Modul installiert ist, sollten keine Aktualisierungen erforderlich sein.

Updates werden verwendet, wenn das Modul bereits installiert ist (die Datenbank oder Variablen wurden erstellt). In diesem Fall möchten Sie das Modul nicht neu installieren, da es alle Daten löscht, sondern erstellen Sie update_n -Hooks. Drupal wird feststellen, welche Aktualisierungen benötigt werden und diese laufen werden update.php. In Drupal 6 wird automatisch ausgewählt, welche Aktualisierungen vorgestellt werden, aber Sie können es ändern, während dies in Drupal 7 nicht möglich ist.

Drupal erkennt, welche Aktualisierungen benötigt werden, indem die Anzahl der letzten Run -Update gespeichert wird. Dies können Änderungen in der Datenbank sein, sodass die Wiederholung von Updates in Drupal 7 erneut ausgelöst werden kann. Die Wiederholung von Updates ist normalerweise eine schlechte Idee und verursacht meistens Fehler und kann in einigen Fällen Ihre Daten durcheinander bringen.

Denken Sie immer daran, Ihre Datenbank zu sichern, bevor Sie Updates ausführen.

Andere Tipps

Der Zweck der Haken ist anders.

  • Hook_install () wird aufgerufen, wenn ein Modul installiert ist; Dies bedeutet, dass das Modul zuvor nicht installiert wurde und daher nicht aktualisiert werden muss.
  • Hook_update_n () wird aufgerufen, wenn ein Modul bereits installiert ist, und es muss aktualisiert werden.

Wenn es einige Aufgaben gibt, die bei der Installation des Moduls erledigt werden müssen und wenn das Modul aktualisiert wird, sollte der Code in beiden Hooks vorhanden sein. Es gibt kein Modul, das alle Update -Hooks während der Installation aufruft, und das wäre besonders falsch, wenn die Aktualisierung das Schema der vom Modul verwendeten Datenbanktabellen aktualisieren. Hook_schema () Sollte immer das aktualisierte Schema zurückgeben und das Schema auch mit den Update -Funktionen zu aktualisieren, wäre falsch.

Der Code, den Sie geschrieben haben, funktioniert nicht, da das Aufrufen einer der Update -Funktionen nicht alle anderen Aktualisierungsfunktionen automatisch ausführt.
Aufrufen der Aktualisierungsfunktionen aus der Implementierung von hook_install()ist falsch, da es falsch ist, eine Aktualisierungsfunktion von einem anderen aufzurufen; Wenn es einen Code gibt, der aus zwei oder mehr Aktualisierungsfunktionen ausgeführt werden muss, sollte dieser Code in einer Funktion platziert werden, die aus den Aktualisierungsfunktionen aufgerufen wird, und von aus hook_install(), im Bedarfsfall.

Der Install -Hook wird nur aufgerufen, wenn das Modul frisch installiert ist, sodass keine Aktualisierungen erforderlich sind. Die Updates werden nur ausgeführt, wenn das Modul bereits installiert ist, sodass zusätzliche Änderungen angewendet werden können.

Um die Update -Funktionen für die Installation zu erzwingen, können Sie beispielsweise Ihre Schemaversion ändern:

function mymod_install() {
  // Reset the schema version, so our update hooks can be processed during the installation.
  drupal_set_installed_schema_version('mymod', '7000');
  // Then run the updates as usual.
  mymod_update_7001();
}

Oder führen Sie es aus Dreh: drush -y updb.

Siehe auch: Ist es möglich, den Update -Hook Ihres Moduls zum Ausführen zu zwingen?

Hook_install würde nicht mit in funktionieren mymod.module Datei.

Sie müssen platzieren hook_install und hook_uninstall in einer separaten Datei mymod.install

Ich vermute, dass hook_update_N() sollte auch in platziert werden mymod.install


Beantworten Sie nach der aktualisierten Frage:

Zitieren aus a Verknüpfung, Bitte überprüfen Sie Ihre Versionsnummer in der Info -Datei.

Da ich mich privat entwickle und nicht für den Beitrag, ist mein "Version" -Feld in der .Info -Datei meines Moduls leer oder unverändert, wenn ich ein Modul aktualisiere. Ich verwende tatsächlich Subversive für Eclipse PDT und daher werden die Versionsnummern meiner Info -Dateien nie aktualisiert. Somit wurde mein Hook_UPDATE_6001 nicht von update.php aufgerufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top