Duplication Multiboutique d’une Catégorie Complète — PrestaShop 8 & 9
Installer et utiliser l'assistant de duplication multiboutique : source, mapping des boutiques cibles, options de copie et exécution par lots.
Ce module ajoute au back-office un assistant qui duplique une catégorie entière — avec tous ses produits, déclinaisons, images, attributs, prix spécifiques et stock — d’une boutique vers une ou plusieurs autres boutiques d’un même PrestaShop en multiboutique. Cette documentation couvre l’installation, le fonctionnement interne et l’utilisation pas à pas de l’assistant.
Prérequis
- PrestaShop 8.0 à 9.x.
- Le mode multiboutique doit être activé (Paramètres avancés puis Multiboutique), avec au moins deux boutiques.
- Un profil employé disposant de l’accès en écriture au catalogue.
Si le multiboutique est désactivé ou qu’une seule boutique existe, l’assistant affiche un message et n’autorise pas la duplication : il n’y aurait aucune boutique cible.
Installation
- Dans le back-office, ouvrez Modules puis Gestionnaire de modules.
- Cliquez sur « Envoyer un module » et déposez le fichier ZIP.
- Une fois installé, un onglet apparaît sous Catalogue, nommé « DF Shop Duplicator ».
Comment ça fonctionne
Contrairement à un simple duplicateur de produits, le module ne crée pas de nouvelles entités produit. Il s’appuie sur le mécanisme d’association multiboutique natif de PrestaShop : un produit reste une entité partagée, et seules les données propres à chaque boutique sont copiées vers la boutique cible.
Concrètement, pour chaque produit dupliqué, le module recopie les lignes par boutique : product_shop, product_lang, image_shop, product_attribute_shop, stock_available, specific_price (limité à la boutique, hors panier), ainsi que les associations de transporteurs et les tables de correspondance nécessaires (attributs, groupes d’attributs, caractéristiques, marque, fournisseur, groupe de taxes).
Conséquence directe : aucune référence produit dupliquée, aucune image recopiée sur le disque, et les modifications globales futures d’un produit restent propagées à toutes les boutiques qui le partagent.
Les catégories, en revanche, sont traitées différemment. L’identifiant du parent d’une catégorie (id_parent) étant global, on ne peut pas simplement « associer » une arborescence sous un autre parent. Le module crée donc de nouvelles catégories sous le parent cible que vous avez désigné — ou réutilise celles qui existent déjà, selon l’option choisie.
Utiliser l’assistant en 3 étapes
Étape 1 — Boutique et catégorie source
Sélectionnez la boutique de départ, puis la catégorie à dupliquer dans l’arbre. Cochez « inclure les sous-catégories » si vous souhaitez traiter toute la branche et non la seule catégorie sélectionnée. Le nombre de produits concernés est affiché pour vous repérer.
Étape 2 — Boutiques cibles et mapping
Cochez la ou les boutiques de destination. Pour chaque boutique cochée, un arbre de catégories apparaît : désignez-y la catégorie de destination sous laquelle les produits (et éventuellement l’arborescence) seront placés. Par défaut, la racine de la boutique cible est présélectionnée.
Étape 3 — Options et exécution
Réglez les options de copie (voir la section suivante), vérifiez le résumé, puis lancez la duplication. Une barre de progression et un journal en direct affichent l’avancement, produit par produit, ainsi que les éventuels avertissements.
Les options en détail
- Copier l’arborescence : recrée les sous-catégories sous la catégorie cible en respectant la hiérarchie. Décochée, tous les produits sont placés directement sous la catégorie cible (mode « flatten »).
- Réutiliser les catégories existantes : au lieu de recréer des catégories, le module retrouve celles déjà présentes sous le parent cible par correspondance de leur réécriture d’URL. C’est ce qui rend la duplication idempotente.
- Copier les quantités : duplique le stock vers la boutique cible (voir la gestion du stock ci-dessous).
- Prix spécifiques : recopie les prix spécifiques limités à la boutique.
- Produits de packs (récursif) : associe également les produits enfants des packs présents dans la sélection.
- Réindexation de la recherche : réindexe chaque produit copié pour la recherche front-office. Utile mais plus lent sur de gros volumes.
- Taille de lot : nombre de produits traités par passe AJAX (20 par défaut, jusqu’à 200). Réduisez-la sur un hébergement contraint, augmentez-la pour aller plus vite.
Recréation et réutilisation des catégories
Lorsque « Réutiliser les catégories existantes » est activée, le module recherche sous le parent cible une catégorie dont la réécriture d’URL correspond à celle de la source. S’il en trouve une, il l’utilise ; sinon, il en crée une nouvelle. Vous pouvez ainsi relancer la duplication autant de fois que nécessaire sans accumuler de doublons de catégories — par exemple après avoir ajouté de nouveaux produits à la source.
Pour une première synchronisation « à plat » où tous les produits doivent atterrir sous une seule catégorie cible, décochez « Copier l’arborescence » et laissez « Réutiliser les catégories existantes » cochée.
Gestion du stock et partage entre boutiques
La copie du stock tient compte du paramètre de partage du stock du groupe de boutiques. Si la boutique source et la boutique cible partagent déjà le même pool de stock, la copie est ignorée : dupliquer les quantités créerait des incohérences. Dans le cas contraire, les quantités sont recopiées vers la boutique cible. Ces décisions sont tracées dans le journal d’exécution.
Produits de packs
Si la sélection contient des packs et que l’option correspondante est activée, le module associe récursivement les produits enfants de chaque pack à la boutique cible, afin que le pack reste vendable. Une protection évite les boucles en cas de packs imbriqués.
Gros catalogues et reprise
L’exécution se déroule par lots AJAX successifs : le navigateur enchaîne les appels jusqu’à la fin, ce qui évite tout timeout PHP même sur plusieurs milliers de produits et de déclinaisons. Le job est persisté en base de données (table dédiée), avec un pointeur de position : si le traitement est interrompu (fermeture d’onglet, coupure réseau), il peut reprendre là où il s’était arrêté plutôt que de tout recommencer.
Dépannage
L’assistant indique que le multiboutique n’est pas disponible
Vérifiez que le mode multiboutique est activé et qu’au moins deux boutiques existent. L’assistant a besoin d’une boutique source et d’au moins une boutique cible distincte.
Des produits semblent « manquants » dans la boutique cible
Assurez-vous que la catégorie de destination est correctement mappée à l’étape 2 et que les produits sont bien actifs. En mode « flatten », les produits sont placés sous la catégorie cible unique, pas sous une arborescence recréée.
Le stock n’a pas été copié
C’est le comportement attendu si les deux boutiques partagent le même pool de stock. Le journal d’exécution le signale par un avertissement.
Après une deuxième exécution, je vois des catégories en double
Activez « Réutiliser les catégories existantes ». Sans cette option, chaque exécution recrée de nouvelles catégories sous le parent cible.