---
title: Scripts de upgrade — actualizaciones de modulos
section: modules
slug: upgrade-scripts
description: "Como crear scripts de upgrade para actualizar modulos PrestaShop: directorio upgrade/, convencion de nombres, migraciones de DB y actualizar Configuration."
keywords: prestashop upgrade modulo actualizacion script migracion base de datos upgrade.php version
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/modules/upgrade-scripts"
---

# Scripts de upgrade — actualizaciones de modulos

> Como crear scripts de upgrade para actualizar modulos PrestaShop: directorio upgrade/, convencion de nombres, migraciones de DB y actualizar Configuration.

Cuando publicas una nueva version de tu modulo, los scripts de upgrade se ejecutan automaticamente para migrar la base de datos y la configuracion de los usuarios que actualizan desde versiones anteriores. Sin ellos, los usuarios tendrian que desinstalar y reinstalar el modulo.

## El directorio upgrade/

*Estructura del directorio upgrade/ en un modulo*

```bash
modules/mymodule/
├── upgrade/
│   ├── upgrade-1.1.0.php   # Script que ejecuta la migracion a 1.1.0
│   ├── upgrade-1.2.0.php   # Script que ejecuta la migracion a 1.2.0
│   ├── upgrade-2.0.0.php   # Script que ejecuta la migracion a 2.0.0
│   └── index.php           # Seguridad: <?php exit;
└── mymodule.php

# Cuando un usuario actualiza de 1.0.0 a 2.0.0,
# PrestaShop ejecuta en orden:
# upgrade-1.1.0.php, upgrade-1.2.0.php, upgrade-2.0.0.php
```

## Convencion de nombres

*upgrade/upgrade-1.1.0.php — estructura del script*

```php
<?php
/**
 * Script de upgrade a la version 1.1.0 de mymodule.
 * Se ejecuta automaticamente cuando el modulo se actualiza desde < 1.1.0
 */

if (!defined('_PS_VERSION_')) { exit; }

/**
 * La funcion DEBE llamarse upgrade_module_{version-con-guiones}
 * Version 1.1.0 -> upgrade_module_1_1_0
 * Version 2.0.0 -> upgrade_module_2_0_0
 */
function upgrade_module_1_1_0(Module $module): bool
{
    $success = true;

    // Tu logica de migracion aqui
    // Si devuelve false, el upgrade se considera fallido
    // y PrestaShop mostrara un error

    return $success;
}
```

## Script de migracion de base de datos

*upgrade/upgrade-1.2.0.php — ejemplo de migracion de DB*

```php
<?php

if (!defined('_PS_VERSION_')) { exit; }

function upgrade_module_1_2_0(Module $module): bool
{
    $db = Db::getInstance();
    $success = true;

    // ── AÑADIR COLUMNA ──
    if (!$db->execute(
        'ALTER TABLE `' . _DB_PREFIX_ . 'mymodule_item`
         ADD COLUMN `sort_order` INT(11) UNSIGNED NOT NULL DEFAULT 0
         AFTER `description`'
    )) {
        $module->_errors[] = 'Error al añadir columna sort_order';
        $success = false;
    }

    // ── CREAR TABLA NUEVA ──
    if (!$db->execute(
        'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'mymodule_item_shop` (
             `id_mymodule_item` int(11) UNSIGNED NOT NULL,
             `id_shop`          int(11) UNSIGNED NOT NULL,
             PRIMARY KEY (`id_mymodule_item`, `id_shop`)
         ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8mb4'
    )) {
        $module->_errors[] = 'Error al crear tabla mymodule_item_shop';
        $success = false;
    }

    // ── MIGRAR DATOS EXISTENTES ──
    if ($success) {
        $items = $db->executeS('SELECT id_mymodule_item FROM `' . _DB_PREFIX_ . 'mymodule_item`');
        $idShop = (int) Configuration::get('PS_SHOP_DEFAULT');
        foreach ($items as $item) {
            $db->insert('mymodule_item_shop', [
                'id_mymodule_item' => (int) $item['id_mymodule_item'],
                'id_shop'          => $idShop,
            ]);
        }
    }

    return $success;
}
```

## Actualizar Configuration en el upgrade

*upgrade/upgrade-2.0.0.php — renombrar claves de Configuration*

```php
<?php

if (!defined('_PS_VERSION_')) { exit; }

function upgrade_module_2_0_0(Module $module): bool
{
    // Migrar clave de configuracion antigua a nueva
    $oldValue = Configuration::get('MYMODULE_OLD_API_KEY');
    if ($oldValue !== false) {
        Configuration::updateValue('MYMODULE_API_KEY', $oldValue);
        Configuration::deleteByName('MYMODULE_OLD_API_KEY');
    }

    // Añadir nueva clave con valor por defecto
    if (Configuration::get('MYMODULE_CACHE_TTL') === false) {
        Configuration::updateValue('MYMODULE_CACHE_TTL', 3600);
    }

    // Registrar nuevo hook
    if (!$module->registerHook('displayProductExtraContent')) {
        $module->_errors[] = 'Error al registrar hook displayProductExtraContent';
        return false;
    }

    return true;
}
```


---

*Fuente: [https://ayudaprestashop.es/modules/upgrade-scripts](https://ayudaprestashop.es/modules/upgrade-scripts). Version Markdown generada automaticamente para consumo por LLMs.*
