Sin impuesto Con impuesto

Aggiornare un modulo senza rompere i negozi: script di upgrade e versionamento

L'installazione pulita la provano tutti; l'aggiornamento dalla versione di un anno fa, quasi nessuno. Ecco come evitiamo che una nuova versione rompa negozi che già funzionavano.

Jesús Meilán
Updated: 26/09/2026 101
Aggiornare un modulo senza rompere i negozi: script di upgrade e versionamento
Share:

Quando provi un modulo, di solito lo installi in un negozio pulito. Ma i tuoi clienti non installano: aggiornano, a volte saltando cinque versioni. Se il percorso di aggiornamento non è curato, la nuova versione funziona sulla tua macchina e fallisce sulla loro.

Come decide PrestaShop cosa eseguire

Quando carichi una nuova versione, PrestaShop confronta la versione salvata nella tabella module con quella del codice ed esegue, in ordine, i file upgrade/upgrade-X.Y.Z.php la cui versione sta tra le due. Ognuno definisce una funzione:

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');
}

Le quattro regole

  1. Idempotenti. Uno script può essere eseguito due volte (un aggiornamento interrotto, una reinstallazione). Controlla prima di creare: colonne, indici, schede, configurazioni.
  2. Tutto ciò che è nuovo, anche nell'upgrade. Hook, schede, tabelle e valori di configurazione che aggiungi in install() devono avere il loro gemello in uno script di upgrade, altrimenti i negozi vecchi non li avranno mai.
  3. Non cancellare mai i dati del cliente. Se una colonna è di troppo, lasciala o rinominala; non eliminarla in un upgrade. E attenzione a disinstallare per reinstallare: ci sono moduli che cancellano tutte le loro tabelle quando vengono disinstallati.
  4. Restituisci davvero true o false. Se l'upgrade fallisce e restituisci true, PrestaShop segna la versione come applicata e non ci riproverà.
Esempio reale: una schermata di back office che dà errore 500 in alcuni negozi e in altri no. La causa: due schede con la stessa classe, perché una versione vecchia la creava in install() e un upgrade successivo la ricreava senza controllare. Doctrine si aspetta una riga e ne trova due.

Versionamento semantico

  • Patch (1.4.1): correzioni senza modifiche ai dati.
  • Minore (1.5.0): nuove funzionalità retrocompatibili, con il loro script di upgrade.
  • Maggiore (2.0.0): modifiche che richiedono di rivedere la configurazione o che abbandonano versioni di PrestaShop o PHP.

Come lo testiamo

Installiamo la versione precedente pubblicata in un negozio di test, la configuriamo con dati simili a quelli di un cliente e aggiorniamo con il nuovo ZIP dal gestore dei moduli, esattamente come farà il cliente. Solo dopo proviamo l'installazione pulita. Sembra più lento; in realtà è ciò che ci risparmia le segnalazioni del lunedì mattina.

Caricamento...
Consenso sui cookie
Torna all'inizio