Développez avec PHP pour PrestaShop
Architecture, personnalisations, thèmes et conceptions de modules
Ce livre 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 [...]
[lire le résumé du livre]
Auteur : Jonathan DANSE
Editeur : Eni
Collection : Expert IT
Date parution : 02/2023CB Google/Apple Pay, Chèque, Virement
Quel est le sujet du livre "Développez avec PHP pour PrestaShop"
Ce livre 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.
Quizinclus dans
la version en ligne !Téléchargements
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.
En suivant ce lien, retrouvez tous les livres dans la spécialité DHTML-XML-PHP.
Sommaire et contenu du livre "Développez avec PHP pour PrestaShop - Architecture, personnalisations, thèmes et conceptions de modules"
Introduction
- 1. Avant-propos
- 2. À qui s'adresse cet ouvrage ?
- 3. Prérequis
- 4. Objectif du livre
- 5. Architecture
- 5.1 Modèle MVC
- 5.2 Smarty
- 5.3 Symfony
- 5.4 Twig
- 6. Conception dirigée par le domaine
- 6.1 Préambule
- 6.2 Les domaines de services (Domain services)
- 6.3 Data Transfer Objects
- 6.4 Les objets-valeur (Value Objects)
- 6.5 Exceptions de domaine (Domain Exceptions)
- 6.6 CQRS
- 6.6.1 Validation des données
- 6.6.2 Commandes (Command)
- 6.6.3 Gestionnaire de commande (CommandHandler)
- 6.6.4 Requête (Query)
- 6.6.5 Gestionnaire de requête (QueryHandler)
- 6.6.6 Bus de commandes
- 6.6.7 Outils de développement
- 6.6.8 Utilisation au sein des modules
- 7.1 Prérequis
- 7.1.1 Serveur
- 7.1.2 Version de PHP
- 7.1.3 Extensions
- 7.1.4 Réglages
- 7.1.5 Outil de vérification automatique
- 7.2.1 Via une version packagée
- 7.2.2 Via GitHub
- 7.3.1 Via Composer
- 7.3.2 Via l'interface en ligne de commande (CLI)
- 8.1 Préambule
- 8.2 Activation du mode
- 8.3 La fonction dump() et dd()
- 8.3.1 Utilisation dans les fichiers Twig
- 9.1 Manuellement
- 9.2 Automatique via le module 1-Clik Upgrade
- 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.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
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.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.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.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.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
- 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.1 Utilisation des routes
- 6.1.1 En PHP
- 6.1.2 Via TypeScript
- 6.1.3 Via JavaScript
- 8.1 Listes des commandes
- 8.2 Ajouter une commande
- 8.3 Le contexte legacy
- 9.1 Utilisation au sein d'un template
- 9.1.1 Smarty
- 9.1.2 Twig
- 9.3.1 Enregistrer un écouteur (listener)
- 9.3.2 Enregistrer une souscription (subscriber)
- 10.1 HelperCalendar
- 10.2 HelperView
- 10.3 HelperList
- 10.3.1 En-tête avancé
- 10.3.2 Colonnes d'actions
- 11.1 Types additionels
- 11.2 Aide au rendu
- 11.3 Thème des formulaires
- 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
- 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.6.1 appendClosure()
- 14.6.2 getArrayCopy()
- 14.6.3 intersectKey()
- 14.7.1 Hook actionPresentProduct
- 14.7.2 Hook actionPresentOrder
- 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.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.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.1 Préambule
- 10.5.2 Adaptation du menu
- 10.5.3 Définition
- 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.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.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.1 Conception du formulaire
- 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.1 Création des commandes
- 17.1.1 Command handler
- 17.2.1 Form Data Handler
- 17.2.2 Form Data Provider
- 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.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.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.1 Introduction
- 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.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
- 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.1 Déclaration du hook
- 3.4.2 Conception du gabarit
- 3.7.1 Définir une transformation
- 3.7.2 Enregistrer une transformation
- 3.8.1 Préambule
- 3.8.2 Installer le convertisseur
- 3.8.3 Lancer la conversion
- 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.1 Valider son thème
- 5.1 Décharger un asset
- 5.2 Webpack
- 5.2.1 Installation
- 5.2.2 Configuration
- 6.1 Fonctions utiles
- 6.2 prestashop.checkPasswordScore
- 7.1 Créer un thème enfant
- 7.2 Charger les assets du thème parent
- 7.3 Réaliser des modifications
- 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.1 Transmettre un événement
- 9.2 Écouter un événement
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.1 Introduction
- 2.2 Modification de la configuration
- 2.3 Utilisation dans le composant Form