Chaque marchand a un fonctionnement très spécifique en ce qui concerne la logistique, la gestion des produits, la manière de les identifier, beaucoup de e-commerçants utilisent la référence de Prestashop.
La référence produit
A quoi sert la référence produit de Prestashop ? Celle-ci permet au marchand d’identifier un produit par une chaine de caractères de son choix. Cette référence sert surtout à l’interne et sera affichée au client sur la fiche produit (on évitera donc de mettre le code fournisseur dedans). Par contre, ce que j’ai toujours eu de la peine à comprendre c’est que :
- Il est possible de mettre une référence identique sur plusieurs produits, Prestashop n’effectue pas de contrôle de doublons.
- Pourquoi mettre une référence sur le produit principal, lorsque celui-ci dispose de déclinaisons, la référence principale devrait être à mon sens désactivée dans ce cas.
Le marchand débordé
Certains marchands ont par exemple commencé à indiquer les références de leurs produits… puis ils ont fait une pause et après ne se souviennent plus si tous leurs produits ont bien une référence. Et surtout si toutes les références sont uniques, cela peut-être important si vous utilisez un système externe qui communique avec Prestashop et qui se sert de la référence produit comme identifiant de mise à jour.
Renommer les références en masse
Nous allons voir ensemble un processus qui permet de remettre à jour toutes les références des produits de manière à ce que chaque produit et chaque déclinaison, aient une référence, mais aussi qu’elles soient uniques.
Pour cela vous pouvez télécharger le script pour Prestashop, il suffira ensuite de mettre le dossier « scripts » dans votre dossier « modules » et d’exécuter l’url suivante : http://www.votresite.ch/modules/scripts/rename_references.php
Pour ceux qui préfèrent directement le code php
<?php /* * Permet de re-définir des références uniques pour tous les articles du shop */ require('/../../config/config.inc.php'); $prefix_ref = 'REFB-'; $prefix_refd = 'REFD-'; $count = 0; $products = Db::getInstance()->executeS('SELECT `id_product` FROM '._DB_PREFIX_.'product'); foreach($products as $p){ Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'product SET `reference`="'.pSQL($prefix_ref.$p['id_product']).'" WHERE `id_product`="'.pSQL($p['id_product']).'"'); $count++; } $products_attributes = Db::getInstance()->executeS('SELECT `id_product_attribute` FROM '._DB_PREFIX_.'product_attribute'); foreach($products_attributes as $pa){ Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'product_attribute SET `reference`="'.pSQL($prefix_refd.$pa['id_product_attribute']).'" WHERE `id_product_attribute`="'.pSQL($pa['id_product_attribute']).'"'); $count++; } echo 'Félicitation <strong>'.$count.'</strong> références mises à jour !'; ?>
La manière de faire est toute simple, tous les produits sont renommés en utilisant la méthode suivante pour les produits simples « REFB-IDPRODUIT » et pour les déclinaisons « REFD-IDDECLINAISON » ce qui permet d’assurer que l’information soit bien unique.
Et pour les nouveaux produits
Vous avez deux possibilités, vous pouvez « ré-exécuter » le script lorsque vous aurez saisi de nouveaux produits les références resteront les mêmes pour les anciens produits et les nouveaux seront automatiquement complétés. Si vous désirez saisir manuellement vos références utilisez toujours en préfixe « REFB- » ou « REFD- » pour savoir s’il s’agit d’un produit principal ou d’une déclinaison, puis ensuite mettez l’id du produit + (-1,-2,-3,-4) si vous avez par exemple 4 déclinaisons.
Bilan
De mon côté dans les modules qui doivent communiquer avec d’autres plateformes (comme WinBIZ), je me sers souvent de cette référence. Et il n’est pas rare dans une boutique d’avoir des références vides ou à double, ce qui provoquerait ensuite un vrai problème pour l’échange des données. Cette petite méthode peut faire gagner du temps et assure au moins d’avoir des codes articles toujours rationnels, même s’ils ne sont pas très parlants.
Bonjour,
J’essaie de suivre votre procédure, mais lors que je vais sur le lien indiqué http://www.lescrealudejuju.com/modules/scripts/rename_references.php
Rien ne se passe malheureusement, faut t’il que le site soit en local ?
je vous remercie de votre réponse,
Adrien
Bonjour,
Pouvez-vous essayer d’activer le debug Prestashop pour voir si une erreur survient :
http://blog.juliepirio.com/prestashop-1-6-activer-le-mode-debug-pour-vos-test/
Bonsoir,
La procédure ne fonctionne pas pour moi non plus (erreur 500). Qu’en est-il?
Avec tous mes remerciements pour votre aide
Bien cordialement
Bonjour,
Si vous avez une erreur 500 après 30 secondes environ, il est possible que votre serveur n’a pas la puissance requise pour exécuter l’ensemble du traitement sur tous vos produits.
Pour cela il peut-être nécessaire d’augmenter les valeurs « max_excution_time » et « memory_limit » de PHP (il faut pour cela consulter votre hébergeur).
Merci pour votre visite.
Bonjour,
Merci pour votre réponse rapide, et excusez-moi pour mon retour tardif. J’ai suivi vos préconisations, et augmenter les valeurs « max_excution_time » passage de 30 à 60, et « memory_limit » passage de 128 à 512M dans PHP 5.6.
J’ai maintenant une réaction, mais l’apparition d’une erreur:
Warning: require(/../../config/config.inc.php): failed to open stream: No such file or directory in /home/mpaglia/public_html/modules/scripts/rename_references.php on line 7
Fatal error: require(): Failed opening required ‘/../../config/config.inc.php’ (include_path=’.:/opt/alt/php56/usr/share/pear:/opt/alt/php56/usr/share/php’) in /home/mpaglia/public_html/modules/scripts/rename_references.php on line 7
Pensez-vous que je puisse y remédier sachant que ma version de prestashop est: 1.6.1.4 alors que la votre semble être 1.6.1.1
Encore tous mes remerciements pour votre aide
Bien cordialement
Bonjour,
Je confirme que ce script ne donne qu’une page blanche. Et en passant en mode debug … aucune erreur en vue. Aucune modification de mes références non plus.
Avec mes meilleures salutations
Bonjour,
Il faut voir si le script effectue une page blanche de manière « immédiate », si oui il est possible qu’une erreur SQL soit présente et que celui-ci soit incompatible avec votre base de données.
Si au contraire la page blanche survient au bout d’un certain temps, ce sont les ressources du serveur (par défaut « memory_limit » à 30 secondes) qu’il faudrait augmenter pour tester.
Merci pour votre visite !
Bonjour,
L’erreur que j’ai eu c’était ici « require(‘../../config/config.inc.php’); » j’ai juste retirer le premier « / »
Si non, serait-il possible qu’il ajoute l’id a la référence existante, plutot que de changer toute la référence?
Bonjour,
C’est possible, mais dans la sélection MySQL il faudrait ajouter la référence…
puis après dans l’update faire plutôt un
Mais je n’ai pas testé, car effectivement pour arriver à ce résultat il faut adapter le script.
Merci pour votre visite !
Chez moi la méthode fonctionne nikel
Parfait
Formidable
J’ai simplement enlever un / à la ligne
require(‘../../config/config.inc.php’);
Et paf ! Magique
Merci
Hello,
C’est top si cela a fonctionné… bonne continuation.
A bientôt !
J’ai essayé sur presta 1.7.6.1, ca ne fonctionne pas. Ne se passe rien 🙂
J’ai enlevé enlever un / à la ligne require(‘../../config/config.inc.php’); Mais rien ne se passe.
Le script est il toujours faisable? Car bien sur c’est une super idée !
Merci
Hello,
Il me semble l’avoir utilisé récemment encore, mais je me souviens plus si c’était en Prestashop 1.7. Ce qui serait bien c’est d’activer le debug Prestashop quand tu lances l’exécution du script pour vérifier s’il fait une « FATAL ERROR » dans le processus.
A bientôt !
Bonjour, cela va te faire un réveil joyeux… Comme tous les réveils j’espère !
Merci pour ce script. Génial, cela fonctionne…
Alors Prestashop v1.7.6.1, dans le script j’ai bien retiré la (comme cité plus haut).
En mode DEBUG tout va bien.
L’erreur été de moi, je l’ai testé en local et fait une petite erreur dans le lien.
Trop excité de cette petite fonction incroyable et qui devrait être d’origine dans Prestashop. La gestion efficace des références.
Bien, très bien et félicitations… Pour ce script mais également pour tous tes avis et aides. Merci
Très bon Week end à toi.
Super, très bonne nouvelle si le script PHP pour Prestashop a fonctionné… Bonne continuation !
Bonjour,
Merci pour votre article,
En ce qui me concerne c’est plutôt l’inverse, j’ai importé d’un logiciel passerelles des références uniques et comment maintenant je peux faire pour identifier les déclinaison d’un même produit
Merci de votre aide
bonjour
je n’arrive pas a le faire fonctionné sur prestashop 1.7.6.8
Bonjour,
Ca ne marche pas pour moi malgré les conseils ci dessus… 🙁 j’ai cette erreure quand j’enlève la première ligne
[30-Nov-2020 13:04:56 UTC] PHP Fatal error: Uncaught Error: Class ‘Db’ not found in /home/manofact/public_html/modules/scripts/rename_references.php:12
Stack trace:
#0 {main}
thrown in /home/manofact/public_html/modules/scripts/rename_references.php on line 12
et ça en le laissant :
[30-Nov-2020 12:57:26 UTC] PHP Fatal error: require(): Failed opening required ‘/../../config/config.inc.php’ (include_path=’.:/opt/alt/php70/usr/share/pear’) in /home/manofact/public_html/modules/scripts/rename_references.php on line 7
[30-Nov-2020 13:00:33 UTC] PHP Fatal error: Uncaught Error: Class ‘Db’ not found in /home/manofact/public_html/modules/scripts/rename_references.php:12
🙁 🙁 🙁
Bonjour a tous
Ne fonctionne pas pour la version 1.7.7.8
Cette page ne fonctionne pas Impossible de traiter cette demande via lookbypeg.fr à l’heure actuelle.
HTTP ERROR 500
en mode debug rien
pouvez vous m’aider
Super fonctionne correctement mais il faut utiliser / dans la commande :
Pour ressembler à ceci
Si vous avez besoin d’aide, n’hésitez pas à me contacter, mais il serait intéressant que la commande soit exécutée automatiquement lors de la création d’un article.