Ce support sur PrestaShop (en version 8.0.0 au moment de l’écriture) s’adresse aux développeurs ayant des connaissances en PHP. Il a pour objectif de vous plonger au cœur de ce CMS e-commerce afin d’acquérir les notions nécessaires au développement de nouvelles fonctionnalités en explorant des concepts souvent méconnus. La connaissance du framework Symfony utilisé par PrestaShop (en version 4.4) est un plus mais n’est pas requise. Une brève introduction à ses composants est réalisée dès que...
Ce support sur PrestaShop (en version 8.0.0 au moment de l’écriture) s’adresse aux développeurs ayant des connaissances en PHP. Il a pour objectif de vous plonger au cœur de ce CMS e-commerce afin d’acquérir les notions nécessaires au développement de nouvelles fonctionnalités en explorant des concepts souvent méconnus. La connaissance du framework Symfony utilisé par PrestaShop (en version 4.4) est un plus mais n’est pas requise. Une brève introduction à ses composants est réalisée dès que nécessaire.
Vous apprenez à concevoir une boutique e-commerce sous PrestaShop sous tous ses aspects – excepté la gestion du catalogue – en explorant l’architecture du système, la personnalisation graphique des éléments d’affichage (édition de thèmes, modification de fichiers PDF et emails) ainsi que la conception de fonctionnalités par le biais de modules. En fin de lecture, vous serez également en mesure de modifier l’existant du système pour le faire correspondre à votre besoin.
PrestaShop reposant sur un système hybride – subtil mélange entre son propre framework (le legacy) et l’utilisation de Symfony (le moderne) – la présentation et l’exploration de l’ensemble des concepts utiles au développement et à la personnalisation seront étudiés dans un chapitre dédié.
Enfin, concept clé de PrestaShop oblige, un chapitre concernant la conception de modules aura pour objectif de vous guider tout au long de la conception d’une nouvelle fonctionnalité : un blog. Vous serez ainsi amené à développer une extension en utilisant l’ensemble des concepts legacy que vous ferez évoluer vers la modernité en étant guidé pas à pas tout au long du chapitre.
Des liens vers le guide de référence ainsi que le champ lexical utilisé donneront les clés nécessaires pour approfondir les connaissances sur un sujet précis.
Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.
9.3 En ligne de commande via le module 1-Click Upgrade
9.3.1 Mise à jour de la configuration
9.3.2 Effectuer la mise à jour
9.3.3 Effectuer un retour en arrière
10. Le back-office
10.1 Informations
10.2 Paramètres généraux
10.3 Mode multiboutique
10.4 Mode maintenance
10.5 Performances
10.5.1 Cache
10.5.2 Mode debug
10.6 Employés et profils
11. Les fichiers de configuration
Au cœur de PrestaShop
1. Introduction
2. Conventions de code
2.1 Introduction
2.2 Conventions génériques
2.3 PHP
2.3.1 Documenter son code
2.3.2 Normes utilisées
2.3.3 Types stricts
2.3.4 Déprécier une portion de code
2.4 JavaScript
2.5 HTML et CSS
3. Base de données
3.1 Structure
3.2 Classe Db
3.2.1 Connexion à la base de données
3.2.2 Utilisation d'un serveur tiers
3.2.3 Déclaration d'un serveur tiers
3.2.4 Prévenir de l'injection SQL
3.2.5 Constante _DB_PREFIX_
3.2.6 Méthode execute()
3.2.7 Méthode executeS()
3.2.8 Méthode Insert_ID()
3.2.9 Méthode Affected_Rows()
3.2.10 Méthode getRow()
3.2.11 Méthode getValue()
3.2.12 Méthode numRows()
3.2.13 Méthode nextRow()
3.2.14 Méthode insert()
3.2.15 Méthode update()
3.2.16 Méthode delete()
3.3 Classe DbQuery
3.3.1 Introduction
3.3.2 Type
3.3.3 Clause SELECT
3.3.4 Clause FROM
3.3.5 Jointures
3.3.6 Clause WHERE
3.3.7 Clause ORDER
3.3.8 Clause GROUP BY
3.3.9 Clause HAVING
3.3.10 Limites
3.4 Classe ObjectModel
3.4.1 Définir la ressource
3.4.2 Gestion de la ressource
3.4.3 La suppression douce (Soft Delete)
3.4.4 Gestion de l'image associée
3.4.5 Hooks dynamiques
4. Table des configurations
4.1 Utilisation
4.1.1 Lire une configuration
4.1.2 Enregistrer une configuration
4.1.3 Supprimer une configuration
4.1.4 Utiliser une configuration en tant qu'argument de service
4.2 Multiboutique (ShopConstraint)
5. Notion de contexte (Context)
5.1 Introduction
5.2 Composition du contexte
5.3 Initialisation du contexte
5.4 Récupération du contexte
5.5 Utilisation du contexte
6. Routes (Dispatcher)
6.1 Utilisation des routes
6.1.1 En PHP
6.1.2 Via TypeScript
6.1.3 Via JavaScript
7. Smarty
8. Console
8.1 Listes des commandes
8.2 Ajouter une commande
8.3 Le contexte legacy
9. Hooks
9.1 Utilisation au sein d'un template
9.1.1 Smarty
9.1.2 Twig
9.2 Appeler un hook
9.3 Événements Symfony
9.3.1 Enregistrer un écouteur (listener)
9.3.2 Enregistrer une souscription (subscriber)
10. Helpers
10.1 HelperCalendar
10.2 HelperView
10.3 HelperList
10.3.1 En-tête avancé
10.3.2 Colonnes d'actions
10.4 HelperOptions
10.5 HelperForm
10.6 HelperUploader et HelperImageUploader
10.7 HelperKPI et HelperKpiRow
10.8 HelperTreeCategories
10.9 HelperShop et HelperTreeShops
11. Formulaires (Form)
11.1 Types additionels
11.2 Aide au rendu
11.3 Thème des formulaires
12. Grille (Grid)
12.1 Définir une grille
12.1.1 Concept
12.1.2 Fabrique de conception
12.1.3 Fabrique des données
12.1.4 Association des fabriques
12.2 Hooks associés
13. PrestaShopCollection
14. LazyArray
14.1 Introduction
14.2 Classe abstraite : AbstractLazyArray
14.3 Annotation @arrayAccess
14.4 Utilisation des offsets
14.4.1 Vérification de l'existence
14.4.2 Récupération
14.4.3 Modification
14.4.4 Suppression
14.5 Méthode appendArray()
14.6 Autres méthodes
14.6.1 appendClosure()
14.6.2 getArrayCopy()
14.6.3 intersectKey()
14.7 Exemples d'utilisation
14.7.1 Hook actionPresentProduct
14.7.2 Hook actionPresentOrder
15. Composants JavaScript
15.1 Utilisation
15.2 Composants Grid et GridExtensions
Modules
1. Introduction
2. Organisation des modules
3. Composer
4. Classe principale
4.1 Test préalable
4.2 Héritage
4.3 Constructeur
5. Installation et désinstallation
5.1 Méthode install()
5.2 Méthode uninstall()
5.3 Méthode postInstall()
5.4 Modification de la base de données
6. Configuration du module
6.1 Effectuer un rendu
6.2 Ajout d'un formulaire
6.3 Traitement des données
7. Hooks
7.1 Préambule
7.2 Alias
7.3 Enregistrement d’un hook
7.4 Implémentation
8. Widgets
9. Modèles
9.1 Introduction
9.2 Définition du modèle
9.3 Multilangue et multiboutique
9.4 Doctrine
9.4.1 Préambule
9.4.2 Définition de l'entité
9.4.3 Bien d'autres annotations
9.4.4 Création des tables
9.4.5 Gestion du multilangue
9.4.6 Utilisation
9.4.7 Repository
10. Contrôleurs
10.1 Introduction
10.2 Front-office
10.2.1 Définir une route personnalisée
10.2.2 Restreindre son accès
10.2.3 Placer le contrôleur en maintenance
10.3 Back-office (Legacy)
10.4 Vue Symfony pour le back-office
10.4.1 Introduction
10.4.2 Déclarer le contrôleur
10.4.3 Définir une route
10.4.4 Modifier la méthode getContent()
10.4.5 Définir la vue
10.4.6 Utiliser l'UI Kit
10.5 Back-office (Symfony)
10.5.1 Préambule
10.5.2 Adaptation du menu
10.5.3 Définition
11. Mises à jour
12. Traductions
12.1 Préambule
12.2 Système legacy
12.3 Système moderne
12.3.1 Créer le dictionnaire
12.3.2 Exporter vos traductions
13. Services
13.1 Préambule
13.2 Ajouter un service
13.3 Utiliser le service
13.4 Surcharger un service existant
13.5 Décorer un service existant
13.6 Utiliser un service dans un contexte legacy
14. Utilisation des grilles
14.1 Définition de la grille
14.2 Filtres
14.3 Récupération des données (QueryBuilder)
14.4 Fabrique de grille
14.5 Rendu
14.6 Utilisation avancée
14.6.1 Affichage par défaut (EmptyState)
14.6.2 Actions en masse
15. Utilisation des formulaires
15.1 Conception du formulaire
16. Commandes de console
16.1 Introduction
16.2 Définir une commande
16.3 Enregistrer une commande
16.4 Utiliser une commande
16.5 Définition des arguments et options
17. Utilisation du CQRS
17.1 Création des commandes
17.1.1 Command handler
17.2 Dans les formulaires
17.2.1 Form Data Handler
17.2.2 Form Data Provider
18. Cas particulier
18.1 Module de paiement
18.1.1 Déclaration d'un module comme module de paiement
18.1.2 Ajout des modes de paiement
18.1.3 Traitement et retour
18.1.4 Mode binaire
18.1.5 Mode debug
18.2 Module de livraison
18.2.1 Préambule
18.2.2 Ajout de transporteurs
18.2.3 À propos de la référence d'un transporteur
18.2.4 Association du module au type de module de transport
18.2.5 À propos d'un transporteur sans tranches
18.2.6 Hooks et méthodes associées
19. Cas avancés : utilisation de Vue.js
19.1 Préambule
19.2 Créer son application
19.3 Nettoyer son installation
19.4 Configuration propre à l'environnement PrestaShop
19.5 Afficher l'application
19.6 Transmettre des données du PHP à Vue.js
19.7 Régler les conflits avec Bootstrap ou l'UI Kit embarqué
Personnalisation
1. Traductions
1.1 Introduction
1.1.1 Les différentes ressources de catalogue
1.1.2 Le format XLIFF
1.2 Traduction des messages issus du cœur
1.3 Traduction d'un thème front-office
1.4 Domaines
1.4.1 Les domaines existants
1.4.2 Les sous-domaines
1.5 Utiliser le service Translator
1.5.1 Dans un service
1.5.2 Dans un contrôleur
1.5.3 Dans un template Smarty
1.5.4 Dans un template Twig
2. Fichiers PDF
2.1 Introduction
2.2 Modifier le style global des PDF
2.3 Altérer un template PDF existant
2.4 Fonctions disponibles
2.5 Utilisation des hooks
2.6 Concevoir un template PDF
2.6.1 Conception du HTMLTemplate
2.6.2 Conception avancée
2.6.3 Génération du PDF
2.7 Cas particulier : ajouter un modèle de facture
3. E-mails
3.1 Introduction
3.2 Concepts clés
3.3 Thème d'e-mails
3.3.1 Architecture
3.3.2 Variables
3.3.3 Traductions
3.3.4 Génération
3.3.5 Ajout par le biais d'un module
3.4 Ajouter un gabarit
3.4.1 Déclaration du hook
3.4.2 Conception du gabarit
3.5 Surcharger un gabarit existant
3.6 Ajouter de nouvelles variables
3.7 Transformations
3.7.1 Définir une transformation
3.7.2 Enregistrer une transformation
3.8 Convertisseur MJML
3.8.1 Préambule
3.8.2 Installer le convertisseur
3.8.3 Lancer la conversion
3.9 Utiliser le SDK
3.9.1 Préambule
3.9.2 Installer le SDK
3.9.3 Lancer la conversion
3.9.4 Prise en main
Webservice
1. Introduction
2. Activation du webservice
2.1 Préambule
2.2 Via l'interface
2.3 Via la ligne de commande
3. Création d'une clé d'accès
3.1 Via l'interface
3.2 En PHP
4. Accéder au webservice
5. Gestion des erreurs
6. Schéma d'une ressource
6.1 Schéma blank
6.2 Schéma synopsis
7. Format JSON
8. Lire une ressource
9. Paramètres d'URL
9.1 Paramètre ps_method
9.2 Paramètre display
9.3 Paramètre date
9.4 Paramètre filter
9.5 Paramètre language
9.6 Paramètre limit
9.7 Paramètre sort
9.8 Paramètre sendemail
9.9 Paramètres id_shop et id_group_shop
10. Créer une ressource
11. Mettre à jour une ressource
12. Mise à jour partielle d'une ressource
13. Supprimer une ressource
14. Déclarer une nouvelle ressource
15. Gestion des images
16. Gestion des prix spécifiques
17. Gestion de la recherche
18. Gestion des fichiers (attachments)
19. Gestion des configurations
20. Utilisation de la librairie PHP
20.1 Installation et configuration
20.2 Gestion des erreurs
20.3 Lister les ressources disponibles
20.4 Traitement du retour
20.5 Lire une ressource
20.6 Créer une ressource
20.7 Mettre à jour une ressource
20.8 Supprimer une ressource
20.9 Gestion des images et des fichiers
20.10 Multiboutique
Thèmes
1. Introduction
2. Structure d'un thème
3. Fichier de configuration
3.1 Paramètres généraux
3.2 Paramètres spécifiques
3.2.1 Configuration
3.2.2 Modules
3.2.3 Hooks
3.2.4 Types d'image
3.2.5 Layouts
3.2.6 Dépendances
3.2.7 Assets
3.3 Paramètres requis
4. Fichiers requis
4.1 Valider son thème
5. Gestions des assets
5.1 Décharger un asset
5.2 Webpack
5.2.1 Installation
5.2.2 Configuration
6. Core.js
6.1 Fonctions utiles
6.2 prestashop.checkPasswordScore
7. Les thèmes enfants
7.1 Créer un thème enfant
7.2 Charger les assets du thème parent
7.3 Réaliser des modifications
8. Smarty
8.1 Hooks
8.2 Widgets
8.3 Plugins
8.3.1 Ajouter une fonction
8.3.2 Ajouter un modificateur
8.3.3 Ajouter des plug-ins via un module
9. Événements JavaScript
9.1 Transmettre un événement
9.2 Écouter un événement
10. Sélecteurs JavaScript
11. Prise en charge du RTL
12. Utilisation de templates spécifiques
Pour aller plus loin
1. Surcharges
1.1 Objectifs
1.2 Principes de base
1.3 Surcharge de classes
1.4 Surcharge de contrôleur
1.4.1 Front-office
1.4.2 Back-office
1.5 Surcharge de formulaires
1.5.1 Formulaire back-office
1.5.2 Template back-office
1.6 Surcharge de module
1.6.1 Fichier principal
1.6.2 Contrôleurs
1.6.3 Templates
1.7 Surcharge de services
1.8 Note à propos du cache
2. TinyMCE
2.1 Introduction
2.2 Modification de la configuration
2.3 Utilisation dans le composant Form
3. Différer un appel de module lors de l'import produits, accessoires
4. Export de données au format CSV
5. Description et image de produits
Index
Jonathan DANSE
Jonathan DANSE a démarré le développement de boutiques e-commerce avec PrestaShop en 2010 et a également réalisé un éditeur de code dédié nommé PrestaEdit. Développeur et concepteur de modules PrestaShop au sein des équipes Presta Module et BusinessTech et développeur de thèmes chez SEO Presta pendant plus de 7 ans, il est aujourd’hui Lead développeur PrestaShop chez Wepika, une agence certifiée PrestaShop. Également rédacteur d’articles techniques sur PrestaShop, il figure dans le top 40 des contributeurs de PrestaShop avec plus de 500 contributions au logiciel. Vainqueur du PrestaShop Awards « Contributor Favorite, Most line of code modified », il a aujourd’hui à cœur de faire profiter le lecteur de toute son expertise pour le guider dans son apprentissage de PrestaShop.