Prestashop

Logo PrestashopPrestashop est une solution e-commerce facile et pratique à mettre en œuvre.
C’est également une plateforme sur laquelle je travaille quotidiennement depuis presque 10 ans.
A travers une centaines d’articles écrits durant cette période, j’ai creusé de nombreuses problématiques liées à cette solution, des versions 1.4.x jusqu’aux dernières versions 1.7
J’ai également partagé des canevas de modules et creusé des points spécifiques de la solution, essentiellement une vision orientée module ( ç’est à dire comment interagir le plus simplement avec Prestashop via un module )

Prestashop : gagnez du temps lors la personnalisation des fichiers pdf ( factures / livraisons … )

Une petite note rapide pour donner et historiser une astuce bien pratique dans le cas ou vous souhaitez faire des modifications sur les fichiers pdfs générés par Prestashop dans l’administration.

Ceci concerne tout ceux qui sont générés  par le controller : controllers/admin/AdminPdfController.php

  • Les factures
  • Les livraisons
  • Commandes fournisseurs

Par défaut le comportement est que le fichier pdf est téléchargé par le navigateur, ce qui devient relativement pénible lorsque les modifications sont assez lourdes et qu’on doit télécharger pleins de fois le fichier pour voir le résultat.

Pour forcer l’affichage du pdf dans le navigateur il vous suffit de modifier la fonction generatePDF du controller  controllers/admin/AdminPdfController.php et de rajouter l’option « I » dans l’appel à la fonction render

public function generatePDF($object, $template)
    {
        $pdf = new PDF($object, $template, Context::getContext()->smarty);
        $pdf->render('I'); //Changement de code ici
    }

Le contenu du fichier pdf sera ensuite affiché directement dans le navigateur ce qui fera gagner un temps précieux dans la visualisation des modifications pdf 🙂

Cette astuce a été testée sur une 1.7.4 et une 1.7.6.x

Prestashop : gagnez du temps lors la personnalisation des fichiers pdf ( factures / livraisons … ) Lire la suite »

Prestashop : Utilisation avancée des AdminController – Les options

Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Dans cet article nous allons à présent nous intéresser à la gestion des options de notre controller et voir les cas suivants :

  • Ensemble des cas d’affichage d’options
  • Traitement spécifique d’une option

Les options sont définies dans la fonction __construct() du controller
Voici un code qui génère une grande partie des cas  avec les commentaires explicatifs de leur fonctionnement.

Attention car les valeurs des options seront stockées dans la table globale de configuration de Prestashop.
Pensez donc à bien supprimer ces informations lors de la désinstallation de votre module.…

Prestashop : Utilisation avancée des AdminController – Les options Lire la suite »

Prestashop : utilisation avancée des AdminController – Les formulaires

Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Cet article est encore d’écriture et présente les informations spécifiques aux formulaires

Informations générales

Les formulaires dans les controllers d’administration sont gérés par la classe HelperForm dont le code complet est visible ici :

https://github.com/PrestaShop/PrestaShop/blob/develop/classes/helper/HelperForm.php

Le rendu est ensuite affiché à partir du template : admin-dir/themes/default/template/helpers/form/form.tpl

 

Les types de champs possibles

La bonne nouvelle et qu’il existe une page de démonstration de l’ensemble des possibilités de ces champs dans tous les sites prestashop 🙂

Pour y accéder il faut aller dans votre administration et saisir l’adresse :

http://www.votre-site.comt/admin-dir/index.php?controller=…

Prestashop : utilisation avancée des AdminController – Les formulaires Lire la suite »

Prestashop : utilisation avancée des AdminController – Les listings

Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Cet article détaillera les fonctionnalités suivantes

  • Fonctionnement général
  • Champs active / non active
  • Ajouter un callback sur un champ
  • Ajouter des actions de masse personnalisée
  • Récupérer les données de plusieurs tables

Fonctionnement général

Les listings dans les controllers admin prestashop sont gérés par le helper « HelperList » qui est disponible dans le dossier classes/helpers/HelperList.php

Pour le fonctionnement basique vous pouvez regarder cet article https://www.h-hennes.fr/blog/2018/11/15/prestashop-admincontroller-pour-un-module/
L’initialisation et l’affichage du la liste sont géré dans la fonction renderList() de la class AdminController

Cet article est en cours d’écriture et présentera les informations spécifiques aux listings…

Prestashop : utilisation avancée des AdminController – Les listings Lire la suite »

Prestashop : Créer un controller admin pour un module : Présentation des options avancées

Cet article fait partie d’une série d’articles qui présentent les fonctionnalités avancées disponibles dans un controller d’administration Prestashop. ( adminController )
Les exemples sont réalisés dans le cadre d’un module mais s’appliquent également à tous les anciens controllers de l’administration qui n’utilisent pas encore l’infrastructure symfony
Vous pouvez-consulter les autres articles de la série :

Cet article présent le plan général du sujet qui est assez vaste.
Il était initialement réparti en 2 articles mais pour clarifier les fonctionnalités j’ai séparé les informations par thématiques.

Voici les sujets qui seront traités, cette série ayant vocation a être assez exhaustive n’hésitez pas à partager vos astuces ou les points manquants

Général :

  • Gestion de la toolbar
    • Changement du titre
    • Ajout d’un bouton d’action
  • Ajouter une action
  • Validation spécifique
  • Gestion d’images
  • Appels Ajax
  • Surcharger le template

Listing :

  • Champs active / non active
  • Ajouter un callback sur un champ
  • Ajouter des actions de masse personnalisée
  • Récupérer les données de plusieurs tables

Formulaire :

  • Fonctionnement général
  • Visualisez l’ensemble des champs disponibles
  • Lier des champs en ajax
  • Afficher des contenus totalement personnalisé

Options :

  • Ensemble des cas d’affichage d’options
  • Traitement spécifique d’une option

Prestashop : Créer un controller admin pour un module : Présentation des options avancées Lire la suite »

Prestashop console : Nouvelle version 1.6

Ça fait un moment que je n’avais pas posté d’information à propos de mon outil de console sur Prestashop, PrestashopConsole ( depuis 2016 exactement 😀 )

A l’occasion de la sortie de la version 1.6,  c’est l’occasion le faire à nouveau pour balayer les nouveautés apportées par cette version, ainsi que l’ensemble des possibilités apportées par la console.

Je précise également que l’outil même si il peut être utilisé via un clone du dépôt github, a surtout vocation a être utilisé via son format phar, qu’il faut déposer à la racine de votre projet.

Voici les nouvelles fonctionnalités de cette version :

  • Amélioration de la qualité du code
  • Nouvelles commandes pour générer les fichiers htacess et robots.txt
  • Nouvelles commandes pour lister les hooks ( globalement ou par modules )
  • Nouvelle commande pour générer les miniatures d’images
  • Nouvelle commande pour exporter les images sous forme d’archive
  • Possibilité de renommer le fichier phar
  • Nouvelle commande pour générer des nouvelles commandes ( utilisation développement uniquement )

A compter de cette version, toutes les futures évolutions seront listées dans la page des releases sur github :

https://github.com/nenes25/prestashop_console/releases

Prestashop console : Nouvelle version 1.6 Lire la suite »

Prestashop : Créer ou modifier un produit via l’api

J’ai récemment du tester le bon fonctionnement d’une api produit et j’ai un peu galérer à trouver un script fonctionnel pour créer et modifier un produit via l’api Prestashop.

Si d’autres personnes rencontrent le même problème voici des exemples basiques mais fonctionnels de création et de mise à jour de produits via l’api Prestashop

Le code a été testé sur une version 1.7.6 mais devrait fonctionner sur toutes les versions 1.7 , voir même les versions 1.6 vu que l’api a assez peu bougée.

Les exemples utilisent la librairie du webservice prestashop ( cf. https://devdocs.prestashop.com/1.7/development/webservice/tutorials/prestashop-webservice-lib/ )

Pour créer un produit

try {
        //Création d'un produit avec uniquement les champs requis
        $webService = new PrestaShopWebservice($url, $key, $debug);
 
        $xmlResponse = $webService->get(['url' => $url . '/api/products?schema=blank']);
        $productXML = $xmlResponse->product[0]; //Récupération du schéma de création
        $productXML->name->language[0] = "test de produit Langue 1";
        $productXML->name->language[1] = "test de produit FR";
        $productXML->description->language[0] = "test de description langue 1";
        $productXML->description->language[1] = "test de description FR";
        $productXML->price = "1000.000";
        $productXML->id_category_default = 2;
        $productXML->state = 1;//Cette valeur doit être à 1 pour que le produit soit visible dans les listings admin
 
        //On ajoute également dans une catégorie
        //La première catégorie est déjà présente dans le schéma
        $productXML->associations->categories->category[0]->id = 6;
 
        //Si on veut en ajouter d'autres il faut procéder différement en rajoutant des noeuds
        $categoriesNode = $productXML->associations->categories;
        $categoriesNode->addChild('category')->addChild('id',7);
        $categoriesNode->addChild('category')->addChild('id',8);
 
 
        //Envoi des informations au webservice
        $opt = ['resource' => 'products'];
        $opt['postXml'] = $xmlResponse->asXML();
        $return = $webService->add($opt);
        $id = $return->product->id;
        echo "Création du produit $id <br />";
 
    } catch ( PrestaShopWebserviceException $e){
        echo $e->getMessage();
    }

Prestashop : Créer ou modifier un produit via l’api Lire la suite »

Prestashop 1.7 : Ajouter un champ produit de type file dans l’administration

Suite à mon (ancien ) article (https://www.h-hennes.fr/blog/2017/10/19/prestashop-1-7-ajouter-des-champs-produit/ ) sur l’ajout de champs custom dans le formulaire d’administration d’un produit, j’ai eut pas mal de questions sur comment ajouter un champ de type file.

Il faut reconnaître que la fonctionnalité n’est pas évidente car le formulaire est soumis en ajax et le gère pas l’upload de fichiers.

Le simple fait d’ajouter un champ de type file dans le formulaire n’est donc pas suffisant pour que cela fonctionne.

Cet article présente une approche qui fonctionne, mais je ne peux pas garantir que c’est la meilleure approche.

Pour son fonctionnement je me suis inspiré de la gestion de l’upload qui est faite pour la gestion des images standard du produit via la librairie Js Dropzone

Pour le code j’ai donc repris le code de l’ancien article en y ajoutant la logique d’un champ image.

Voici visuellement comment se présente le champ d’upload

L’ensemble de la logique d’upload et de sauvegarde de la valeur du produit va être gérée directement dans le module

Voici le rendu dans le cas ou une image existe déjà.…

Prestashop 1.7 : Ajouter un champ produit de type file dans l’administration Lire la suite »

Prestashop 1.7 : Ajouter une étape dans le tunnel de commande

Dans sa version 1.7 de Prestashop a complètement refondu le fonctionnement du tunnel de commande.

EDIT : 2024-03-21 :
A compter de la version 1.7.8  il n’est plus nécessaire de réaliser une surcharge car un nouveau hook a été implémenté.
J’ai mis à jour l’article en conséquence.

Le fonctionnement est plus propre que dans la version précédente et avec cette nouvelle architecture il devient relativement simple d’ajouter une nouvelle étape.
Nous allons voir comment réaliser cela via la création d’un module.
L’idée étant d’ajouter une étape « Test de nouvelle étape » comme sur la capture ci-dessous :

Checkout Nouvelle étape
Affichage de la nouvelle étape

Cet étape contiendra uniquement 2 informations que nous souhaitons pouvoir réutiliser dans le panier

Fonctionnement technique avant Prestashop 1.7.8

Les différentes étapes du tunnel de commandes sont gérées dans la méthode  bootstrap du controller OrderController , le code est relativement simple à comprendre.

Un instance de la classe CheckoutProcess est créé.
Puis l’ensemble des steps ( étapes ) sont ensuite ajoutée au checkout via la méthode addStep(CheckoutStepInterface $step) qui attends donc une classe implémentant l’interface CheckoutStepInterface

Voici le code de la fonction du controller natif ( version 1.7.6 de Prestashop )

 protected function bootstrap()
    {
        $translator = $this->getTranslator();
 
        $session = $this->getCheckoutSession();
 
        /**
         * Création du process
         */
        $this->checkoutProcess = new CheckoutProcess(
            $this->context,
            $session
        );
 
        /**
         * Ajout des différentes étapes
         */
        $this->checkoutProcess
            ->addStep(new CheckoutPersonalInformationStep(
                $this->context,
                $translator,
                $this->makeLoginForm(),
                $this->makeCustomerForm()
            ))
            ->addStep(new CheckoutAddressesStep(
                $this->context,
                $translator,
                $this->makeAddressForm()
            ));
 
        if (!

Prestashop 1.7 : Ajouter une étape dans le tunnel de commande Lire la suite »