prestashop_logoPrestashop 1.4 est arrivé depuis quelques semaines avec son lot de nouveautés ! Parmi elle, la possibilité de surcharger les Class du noyau de la célèbre plateforme Open Source. Une superbe nouveauté pour les développeurs puisqu’ils n’auront plus à modifier le noyau de l’outil, chose qui posait de nombreux problèmes pour le mettre à jour par la suite, sans perdre de précieuses modifications apportées.

L’équipe Prestashop a donc pondue un travail énorme pour faciliter les mises à jours de sa plateforme, je vais vous détailler ici comment utiliser ce système de surcharge à travers la surchage de la class ProductSale.

1/ Comprendre le mécanisme de surcharge de Class dans Prestashop 1.4


Si vous avez fouillé un peu dans les fichiers source d’une installation toute fraiche de Prestashop 1.4, vous aurez peut-être remarqué l’apparition du dossier « override » à la racine.

A l’intérieur de ce dernier se trouvent 2 dossiers :

  • classes
  • controllers

Comme vous l’aurez peut-être compris, lorsque Prestashop tente d’instancier un nouvel objet il passe en premier lieu dans ces dossiers pour voir si des surcharges existent. Si aucune n’est trouvée, il reprend son chemin habituel, à savoir la visite du dossier « classes » qui se trouve  la racine.

Le premier dossier « classes » concerne donc toutes les Class utilisées par la boutique, tandis que le dossier controllers concerne les différents contrôleurs (apparus dans cette nouvelle mouture 1.4) qui vous permettront d’effectuer des actions en plus (par exemple, ajouter des hook dans un contrôleur pour y exécuter le code de votre choix, je vous conseil la lecture de cet article de Michel Courtade).

2/ Un exemple : la surcharge de la Class ProductSale


Du concret ! Pour surcharger la class ProductSale rien de plus simple, il vous suffit de créer le fichier suivant dans le dossier override/classes/ : ProductSale.php

Ici on va effectuer un simple héritage de class comme ceci :

<?php

class ProductSale extends ProductSaleCore {

}

Ensuite ça fonctionne comme n’importe quel héritage de class en PHP, vous pouvez surcharger les méthodes de la class ProductSaleCore (anciennement nommée ProductSale dans Prestashop < 1.4). Par exemple, si je souhaitais modifier la méthode getNbSales pour afficher le nombre de produits vendus qui sont désactivés dans ma boutique, il me suffirais de mettre ceci :

<?php

class ProductSale extends ProductSaleCore {

...

 static public function getNbSales()
 {
 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
 SELECT COUNT(ps.`id_product`) AS nb
 FROM `'._DB_PREFIX_.'product_sale` ps
 LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = ps.`id_product`
 WHERE p.`active` = 0');
 return (int)($result['nb']);
 }

...
}

Enfin, vous avez la possibilité d’écrire vos propres méthodes. Dès que Prestashop rencontrera des instanciations de cette class, il viendra parcourir votre nouveau fichier et y exécuter vos méthodes réécrites ou celles qui sont nouvelles. Sinon il cherchera celle de la class mère (ProductSaleCore).

 

Libre à vous d’utiliser ces surchages de class pour créer vos propres modules par exemple !