Sin impuesto Con impuesto

Ein Modul aktualisieren, ohne Shops zu beschädigen: Upgrade-Skripte und Versionierung

Die saubere Installation testet jeder; das Update von der Version vor einem Jahr fast niemand. So verhindern wir, dass eine neue Version Shops beschädigt, die bisher liefen.

Jesús Meilán
Updated: 26/09/2026 122
Ein Modul aktualisieren, ohne Shops zu beschädigen: Upgrade-Skripte und Versionierung
Share:

Wenn Sie ein Modul testen, installieren Sie es meist in einem sauberen Shop. Aber Ihre Kunden installieren nicht: Sie aktualisieren, manchmal über fünf Versionen hinweg. Wenn der Update-Pfad nicht gepflegt ist, läuft die neue Version auf Ihrem Rechner und scheitert auf dem des Kunden.

Wie PrestaShop entscheidet, was ausgeführt wird

Beim Hochladen einer neuen Version vergleicht PrestaShop die in der Tabelle module gespeicherte Version mit der des Codes und führt der Reihe nach die Dateien upgrade/upgrade-X.Y.Z.php aus, deren Version dazwischen liegt. Jede definiert eine Funktion:

function upgrade_module_1_4_0($module)
{
    $db = Db::getInstance();
    $existe = $db->executeS("SHOW COLUMNS FROM `" . _DB_PREFIX_ . "mimodulo` LIKE 'fecha_envio'");
    if (!$existe) {
        $db->execute("ALTER TABLE `" . _DB_PREFIX_ . "mimodulo` ADD `fecha_envio` DATETIME NULL");
    }

    return $module->registerHook('actionOrderStatusPostUpdate');
}

Die vier Regeln

  1. Idempotent. Ein Skript kann zweimal laufen (ein unterbrochenes Update, eine Neuinstallation). Prüfen Sie vor dem Anlegen: Spalten, Indizes, Tabs, Konfigurationen.
  2. Alles Neue auch im Upgrade. Hooks, Tabs, Tabellen und Konfigurationswerte, die Sie in install() hinzufügen, brauchen ihr Gegenstück in einem Upgrade-Skript, sonst bekommen alte Shops sie nie.
  3. Löschen Sie nie Kundendaten. Wenn eine Spalte überflüssig ist, lassen Sie sie oder benennen Sie sie um; entfernen Sie sie nicht in einem Upgrade. Und Vorsicht beim Deinstallieren zum Neuinstallieren: Manche Module löschen beim Deinstallieren alle ihre Tabellen.
  4. Geben Sie wirklich true oder false zurück. Wenn das Upgrade fehlschlägt und Sie true zurückgeben, markiert PrestaShop die Version als angewendet und versucht es nicht noch einmal.
Echtes Beispiel: eine Backoffice-Seite, die in manchen Shops einen 500-Fehler liefert und in anderen nicht. Die Ursache: zwei Tabs mit derselben Klasse, weil eine alte Version ihn in install() anlegte und ein späteres Upgrade ihn ohne Prüfung erneut anlegte. Doctrine erwartet eine Zeile und findet zwei.

Semantische Versionierung

  • Patch (1.4.1): Korrekturen ohne Datenänderungen.
  • Minor (1.5.0): neue, abwärtskompatible Funktionen, mit ihrem Upgrade-Skript.
  • Major (2.0.0): Änderungen, die eine Überprüfung der Konfiguration erfordern oder PrestaShop- bzw. PHP-Versionen aufgeben.

Wie wir es testen

Wir installieren die zuvor veröffentlichte Version in einem Testshop, konfigurieren sie mit Daten, die denen eines Kunden ähneln, und aktualisieren mit dem neuen ZIP über die Modulverwaltung, genau so, wie es der Kunde tun wird. Erst danach testen wir die saubere Installation. Das wirkt langsamer; in Wirklichkeit erspart es uns die Störungen am Montagmorgen.

Laden...
Cookie-Zustimmung
Zum Seitenanfang