Renommez toutes les références de vos produits Prestashop

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.

Référence produits

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.
La référence permet d'identifier rapidement un produit, surtout lorsque vous avez des échanges par e-mail / téléphone avec vos clients.
La référence permet d’identifier rapidement un produit, surtout lorsque vous avez des échanges par e-mail / téléphone avec vos clients.

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.

Parfait, l'opération de la mise à jour des références s'est bien déroulée.
Parfait, l’opération de la mise à jour des références s’est bien déroulée.

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.

BOUM !

1 seul mail par semaine - pas de publicité

21 commentaires sur “Renommez toutes les références de vos produits Prestashop”

  1. 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

    1. 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.

  2. 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

  3. 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

    1. 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 !

  4. 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?

    1. Bonjour,

      C’est possible, mais dans la sélection MySQL il faudrait ajouter la référence…

      $products = Db::getInstance()->executeS('SELECT `id_product`,`reference` FROM '._DB_PREFIX_.'product');
      

      puis après dans l’update faire plutôt un

      Db::getInstance()->execute('UPDATE '._DB_PREFIX_.'product 
                                      SET `reference`="'.pSQL($p['id_product'].'-'.$p['reference']).'"
                                      WHERE `id_product`="'.pSQL($p['id_product']).'"');
      

      Mais je n’ai pas testé, car effectivement pour arriver à ce résultat il faut adapter le script.

      Merci pour votre visite !

  5. 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

    1. 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 !

  6. 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.

  7. 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

  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
    🙁 🙁 🙁

  9. 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

  10. Super fonctionne correctement mais il faut utiliser / dans la commande :

    require('/../../config/config.inc.php');

    Pour ressembler à ceci

    require('../../config/config.inc.php');

    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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *