Duplicación Multitienda de una Categoría Completa — PrestaShop 8 y 9
Instalar y usar el asistente de duplicación multitienda: origen, mapeo de tiendas destino, opciones de copia y ejecución por lotes.
Este módulo añade al back office un asistente que duplica una categoría entera — con todos sus productos, combinaciones, imágenes, atributos, precios específicos y stock — de una tienda hacia una o varias otras tiendas dentro del mismo PrestaShop en multitienda. Esta documentación cubre la instalación, el funcionamiento interno y el uso paso a paso del asistente.
Requisitos
- PrestaShop 8.0 a 9.x.
- El modo multitienda debe estar activado (Parámetros avanzados y luego Multitienda), con al menos dos tiendas.
- Un perfil de empleado con acceso de escritura al catálogo.
Si el multitienda está desactivado o solo existe una tienda, el asistente muestra un mensaje y no permite la duplicación: no habría ninguna tienda destino.
Instalación
- En el back office, abre Módulos y luego Gestor de módulos.
- Haz clic en «Subir un módulo» y suelta el archivo ZIP.
- Una vez instalado, aparece una pestaña bajo Catálogo, llamada «DF Shop Duplicator».
Cómo funciona
A diferencia de un simple duplicador de productos, el módulo no crea nuevas entidades de producto. Se basa en el mecanismo de asociación multitienda nativo de PrestaShop: un producto sigue siendo una entidad compartida, y solo se copian los datos propios de cada tienda hacia la tienda destino.
En concreto, por cada producto duplicado el módulo copia las filas por tienda: product_shop, product_lang, image_shop, product_attribute_shop, stock_available, specific_price (limitado a la tienda, excluyendo el carrito), además de las asociaciones de transportistas y las tablas de correspondencia necesarias (atributos, grupos de atributos, características, fabricante, proveedor, grupo de impuestos).
Consecuencia directa: ninguna referencia de producto duplicada, ninguna imagen recopiada en el disco, y los cambios globales futuros de un producto siguen propagándose a todas las tiendas que lo comparten.
Las categorías, en cambio, se tratan de otra manera. Como el identificador del padre de una categoría (id_parent) es global, no se puede simplemente «asociar» un árbol bajo otro padre. Por eso el módulo crea nuevas categorías bajo el padre destino que hayas designado — o reutiliza las que ya existen, según la opción elegida.
Usar el asistente en 3 pasos
Paso 1 — Tienda y categoría de origen
Selecciona la tienda de partida y luego la categoría a duplicar en el árbol. Marca «incluir subcategorías» si deseas procesar toda la rama y no solo la categoría seleccionada. Se muestra el número de productos afectados para orientarte.
Paso 2 — Tiendas destino y mapeo
Marca una o varias tiendas de destino. Para cada tienda marcada aparece un árbol de categorías: designa en él la categoría de destino bajo la que se colocarán los productos (y opcionalmente el árbol). Por defecto se preselecciona la raíz de la tienda destino.
Paso 3 — Opciones y ejecución
Ajusta las opciones de copia (ver la sección siguiente), revisa el resumen y luego lanza la duplicación. Una barra de progreso y un registro en vivo muestran el avance, producto por producto, junto con los posibles avisos.
Las opciones en detalle
- Copiar el árbol: recrea las subcategorías bajo la categoría destino respetando la jerarquía. Sin marcar, todos los productos se colocan directamente bajo la categoría destino (modo «flatten»).
- Reutilizar las categorías existentes: en lugar de recrear categorías, el módulo encuentra las ya presentes bajo el padre destino por correspondencia de su reescritura de URL. Esto es lo que hace la duplicación idempotente.
- Copiar las cantidades: duplica el stock hacia la tienda destino (ver la gestión del stock más abajo).
- Precios específicos: copia los precios específicos limitados a la tienda.
- Productos de packs (recursivo): asocia también los productos hijos de los packs incluidos en la selección.
- Reindexación de la búsqueda: reindexa cada producto copiado para la búsqueda del front office. Útil pero más lento en grandes volúmenes.
- Tamaño de lote: número de productos procesados por pasada AJAX (20 por defecto, hasta 200). Redúcelo en un alojamiento limitado, auméntalo para ir más rápido.
Recrear y reutilizar categorías
Cuando «Reutilizar las categorías existentes» está activada, el módulo busca bajo el padre destino una categoría cuya reescritura de URL coincida con la de origen. Si encuentra una, la usa; si no, crea una nueva. Así puedes volver a ejecutar la duplicación tantas veces como haga falta sin acumular categorías duplicadas — por ejemplo tras añadir nuevos productos al origen.
Para una primera sincronización «plana» donde todos los productos deban aterrizar bajo una sola categoría destino, desmarca «Copiar el árbol» y deja marcada «Reutilizar las categorías existentes».
Gestión del stock y compartición entre tiendas
La copia del stock tiene en cuenta el ajuste de compartición del stock del grupo de tiendas. Si la tienda de origen y la de destino ya comparten el mismo pool de stock, la copia se omite: duplicar las cantidades crearía incoherencias. En caso contrario, las cantidades se copian hacia la tienda destino. Estas decisiones quedan registradas en el log de ejecución.
Productos de packs
Si la selección contiene packs y la opción correspondiente está activada, el módulo asocia recursivamente los productos hijos de cada pack a la tienda destino, para que el pack siga siendo vendible. Una protección evita los bucles en caso de packs anidados.
Catálogos grandes y reanudación
La ejecución se realiza por lotes AJAX sucesivos: el navegador encadena las llamadas hasta el final, lo que evita cualquier timeout de PHP incluso con varios miles de productos y combinaciones. El job se persiste en la base de datos (tabla dedicada), con un puntero de posición: si el procesamiento se interrumpe (cierre de pestaña, corte de red), puede reanudarse donde se detuvo en lugar de empezar de cero.
Resolución de problemas
El asistente indica que el multitienda no está disponible
Comprueba que el modo multitienda esté activado y que existan al menos dos tiendas. El asistente necesita una tienda de origen y al menos una tienda destino distinta.
Algunos productos parecen «faltar» en la tienda destino
Asegúrate de que la categoría de destino esté correctamente mapeada en el paso 2 y de que los productos estén activos. En modo «flatten», los productos se colocan bajo la categoría destino única, no bajo un árbol recreado.
El stock no se copió
Es el comportamiento esperado si ambas tiendas comparten el mismo pool de stock. El log de ejecución lo señala con un aviso.
Tras una segunda ejecución, veo categorías duplicadas
Activa «Reutilizar las categorías existentes». Sin esta opción, cada ejecución recrea nuevas categorías bajo el padre destino.