Aller au contenu

PrestaShop : changer la méthode de génération des références de commandes

Note : ce code source a été testé et validé seulement avec PrestaShop 1.7.6.1.

Il arrive parfois que l'on veuille changer la façon dont les références de commandes sont générées par PrestaShop, par exemple afin de rajouter un préfixe. Voici comment faire.

  1. Ouvrir le fichier /override/classes/order/Order.php.

    S'il n'exite pas, le créer avec le contenu suivant :

    <?php

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

    class Order extends OrderCore
    {
    }
  2. Rajouter la méthode suivante dans la classe :

    public static function generateReference()
    {
    return 'PFX' . strtoupper(Tools::passwdGen(6, 'NUMERIC'));
    }
  3. Vider le cache.

Cela vous permet par exemple de générer comme ici une référence de 9 caractères : le préfixe « PFX » suivi de 6 chiffres aléatoires.

PrestaShop s'assure ensuite que ce numéro est unique, vous n'avez donc pas à vous en soucier.

Étant donné que cette méthode est statique et sans paramètre, il n'est pas possible d'utiliser la référence du panier, de la commande ou n'importe quoi d'autre afin de générer le numéro, il faut donc se contenter de l'aléatoire.

Faites bien attention à ne pas générer des références de plus de 9 caractères car PrestaShop tronque automatiquement au-delà (le champ en base de données a une longueur maximale de 9 caractères).

À noter aussi que cela ne permet de générer que 999 999 références différentes, ce qui peut gêner les plus grosses boutiques, d'autant plus que plus il y a de commandes, plus la génération de la référence risque d'être ralentie (1). Cela peut se résoudre en mettant en préfixe plus court — voire pas du tout — pour laisser plus de place à la numérotation, et ainsi permettre plus de possibilités. Aussi, il est possible d'imaginer un préfixe qui change à travers le temps ou d'utiliser de l'alphanumérique pour multiplier les possibilités.

  • (1) Cela est dû au fait que PrestaShop génère une référence aléatoirement avec notre fonction puis vérifie qu'elle n'est pas déjà utilisée. Si la référence est déjà utilisée, il recommence le processus. Ainsi, plus il y a de commandes, plus il y a des références déjà utilisées, plus le script doit faire des allers-retours.

Aller plus loin