Prestashop – Afficher le logo du transporteur dans la liste des commandes

Ce tutorial va vous permettre d’ajouter une colonne contenant l’icône du transporteur dans la liste des commandes

Dans le back-office de Prestashop, la liste des commandes contient un certain nombre de colonnes : le nom du client, le mode de paiement, le statut de la commande,… Mais de nombreux commerçants se retrouvent souvent face à cette limite : pour connaître le mode de transport choisi par le client il faut ouvrir chaque commande, impossible d’obtenir cette information d’un simple coup d’oeil depuis la liste.

Or vous êtres nombreux à organiser la préparation des commandes sur la base de ce critère ; parce que le type de livraison est synonyme de degré de priorité (vous avez un mode de livraison rapide, de type « express ») ou parce que vous préparez vos commandes par lots en fonction du transporteur.

Nous allons donc voir comment palier à ce problème.

Ajouter une colonne avec le logo du transporteur dans Prestashop
En modifiant le back-office de Prestashop on peut facilement ajouter une colonne contenant l’icone du transporteur dans la liste des commandes

Intégration de la colonne « Transporteur » dans le tableau des commandes

Pour ajouter la colonne permettant d’indiquer le mode de livraison dans la liste des commandes nous allons créer une surcharge (ou « override ») du contrôleur qui gère l’affichage des commandes dans le backoffice.

Commencez donc par créer un fichier intitulé AdminOrdersController.php dans le répertoire override/controllers/admin. Nous allons ensuite ajouter 3 éléments dans le constructeur du contrôleur (autrement dit la fonction __construct()) :

  • la récupération de l’identifiant du transporteur dans la requête SQL
  • la nouvelle colonne du tableau
  • une méthode qui récupère l’image du logo

Pour la requête SQL on va donc ajouter le champ id_carrier, qui sera récupéré dans la table order_carrier, pour laquelle il faudra mettre en place une jointure.

Ensuite on intègre la nouvelle colonne à la liste existante. Comme elle a déjà été générée par le constructeur parent, on doit aussi la « positionner » vers le début du tableau pour que le logo ne s’affiche pas tout à droite du tableau.

Le code du constructeur ressemble donc maintenant à ça

public function __construct()
{
  // On appelle le constructeur du parent (le controleur natif)
  parent::__construct(); 
  // On recupere l'id_carrier qui va servir pour la methode printCarrierIcon()
  $this->_select .= ', oc.`id_carrier`,';
  // On ajoute une jointure pour atteindre l'id_carrier
  $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'order_carrier` oc ON (a.`id_order` = oc.id_order)';
 // On definit la nouvelle colonne avec icone du transporteur
 // NB : pour Prestashop 1.7 utiliser le nouveau systeme de traduction en remplacant $this->l('Carrier') par $this->trans('Carrier', array(), 'Admin.Global')
 $carrier_column = array(
      'title' => $this->l('Carrier'),
      'align' => 'text-center',
      'callback' => 'printCarrierIcon',
      'orderby' => true,
       'search' => false,
  );
  // On l'integre a la liste (ici en 3eme position)
  $part1 = array_slice($this->fields_list, 0, 2);
  $part2 = array_slice($this->fields_list, 2);
  $part1['id_carrier'] = $carrier_column;
  $this->fields_list = array_merge($part1, $part2);
}

Il ne nous reste plus qu’à créer la méthode déclarée en callback et qui va se charger de retourner le logo. On ajoute donc le code suivant à la fin de notre fichier

// Recuperation de l'image du transporteur
public function printCarrierIcon($id_order, $tr)
{
  if (file_exists(_PS_TMP_IMG_DIR_ . 'carrier_mini_' . $tr['id_carrier'] . '_1.jpg')) {
    return '<img src="../img/tmp/carrier_mini_' . $tr['id_carrier'] . '_1.jpg'.'" class="imgm img-thumbnail" />';
 }
  return null;
 }

Pour faire plus simple vous pouvez également télécharger le fichier qui correspond à votre version de Prestashop.

Attention, comme pour toutes les overrides vous devez faire une manipulation pour qu’elle soit prise en compte. Sous Prestashop 1.6 il faut supprimer le fichier cache/class_index.php manuellement. Sous Prestashop 1.7 il suffit de vider le cache depuis le menu Paramètres avancés > Performances.

En complément : modifier le transporteur associé à une commande

Pour différentes raisons vous êtes peut-être parfois amené à devoir changer le transporteur associé à une commande. Il existe beaucoup de cas de figures :

  • Vous proposez des modes de transports génériques sur votre boutique (ex : « Livraison à domicile », « Livraison express »,…) puis vous confiez les colis à différents transporteurs en fonction de certains critères (poids, distance,…)
  • Un élément de la commande a varié et vous devez opter pour un transporteur plutôt qu’un autre

Dans ce cas vous êtes bloqué, impossible d’effectuer cette manipulation dans le back-office de Prestashop… sauf si vous passez par le module que nous avons conçu à cet effet.

Cliquez sur le boton ci-dessous pour en apprendre plus le module Modifier le transporteur final pour Prestashop, qui vous permettra de changer très facilement l’option de livraison d’une commande.

Laisser un commentaire

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