Blog ENI : Toute la veille numérique !
Dernière chance (fin le 29/02) : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Développez avec PHP pour PrestaShop
  3. Introduction
Extrait - Développez avec PHP pour PrestaShop Architecture, personnalisation, thèmes et conception de modules
Extraits du livre
Développez avec PHP pour PrestaShop Architecture, personnalisation, thèmes et conception de modules
4 avis
Revenir à la page d'achat du livre

Introduction

Avant-propos

PrestaShop est un CMS (Content Management System) permettant de créer un site e-commerce pour la vente en ligne.

Celui-ci est gratuit et open source. Vous pouvez télécharger et installer votre boutique PrestaShop sans coûts (excepté celui de votre hébergeur).

À qui s’adresse cet ouvrage ?

Ce livre est destiné aux développeurs e-commerce sous PrestaShop souhaitant mettre en œuvre de nouvelles fonctionnalités ou des changements techniques et visuels en vue d’améliorer leur boutique.

À la suite de la lecture de cet ouvrage et de votre mise en pratique des différents concepts vus dans celui-ci, vous serez à même d’intervenir sur une boutique PrestaShop existante et d’en assurer la maintenance, ou encore d’y ajouter de nouvelles fonctionnalités.

Prérequis

Pour que votre lecture soit la plus fluide possible, des prérequis techniques sont nécessaires.

La connaissance du langage PHP ainsi que des notions de programmation orientée objet (POO) sont requises.

Une prise de connaissance du back-office de PrestaShop est un plus.

La connaissance de Symfony, Twig ou encore Smarty n’est pas requise. Cet ouvrage vous présentera les fondamentaux utiles. Nous vous invitons à aller plus loin dans votre découverte de ceux-ci, le cas échéant.

Objectif du livre

L’objectif de cet ouvrage est de vous transmettre les concepts techniques et les moyens de mettre ceux-ci en œuvre par la pratique.

Ce livre ne couvre pas l’utilisation et la configuration d’une boutique PrestaShop, en tant que marchand.

Au fil des chapitres, nous couvrirons l’ensemble des aspects relevant du développement sous PrestaShop.

Une attention toute particulière sera faite sur la conception de modules, noyau de tout développement PrestaShop.

En fin de lecture, vous obtiendrez un module complet de gestion de contenus (blog).

Architecture

1. Modèle MVC

L’architecture de PrestaShop est basée sur le modèle MVC : Modèle, Vue, Contrôleur (dit également Model-View-Controller).

Le modèle représente une donnée de l’applicatif. On trouve notamment des modèles pour les produits (Product), les clients (Customer) ou encore les commandes (Order). Ceux-ci seront principalement présents dans le dossier classes.

La vue permet d’afficher un ensemble d’éléments issu du modèle pour le présenter à l’utilisateur et lui permettre, éventuellement, d’interagir avec. Aucun traitement n’est réalisé dans une vue. Les vues sont principalement présentes dans le dossier themes.

Le contrôleur permet de faire le lien entre le modèle et la vue. Il se charge du traitement nécessaire autant à la transmission des données qu’à leurs modifications par l’utilisateur. On retrouve les contrôleurs au sein du dossier controllers

Cette architecture compose le socle de base de l’applicatif PrestaShop. On appelle celui-ci plus communément le Legacy en raison de son obsolescence et de son remplacement au fil de l’eau.

2. Smarty

Smarty est un moteur de rendu. Celui-ci est utilisé pour faciliter la génération de vues dynamiques.

Il est activement utilisé...

Conception dirigée par le domaine

1. Préambule

La conception dirigée par le domaine (ou DDD, de l’anglais Domain-Driven Design) s’appuie sur deux principes :

  • Les conceptions métiers doivent être basées sur un modèle.

  • Le cœur de métier et sa logique sont prioritaires sur l’abstraction technique.

L’objectif principal est de se défaire de la technique, en tant que telle, par omission de la technologie utilisée, tout en décrivant au mieux la conception logicielle par l’utilisation d’une terminologie propre au domaine.

Le langage de programmation utilisé pour parvenir à la mise en place d’un besoin métier n’entre pas en considération.

L’utilisation de méthodologies telles qu’UML (Unified Modeling Language) ou Merise pour la conception graphique de l’implémentation du logiciel passe également en second plan.

On part de la conception métier pour ensuite concevoir son modèle de données. 

Dans l’e-commerce, on pourrait résumer cela très brièvement en disant que la conception métier implique qu’un client puisse commander un produit en ligne.

Pour cela, il devra renseigner ses coordonnées, sa méthode de livraison et effectuer le paiement de l’article.

Une fois le domaine d’application défini, on peut passer à la conception graphique des modèles impliquant un client (Customer), une adresse (Address), un transporteur (Carrier) et une méthode de paiement (Payment Method).

Cela étant fait, l’implémentation technique peut désormais débuter.

2. Les domaines de services (Domain services)

Nous verrons un peu plus loin que des commandes et des gestionnaires de commande sont utilisés pour parvenir à la mise en œuvre des objectifs mentionnés en préambule.

Ce que nous pouvons d’ores et déjà mentionner à leur propos est le fait qu’une commande représente un cas d’usage unique propre au domaine.

Le gestionnaire de commande ne contient, quant à lui, aucune logique liée à son traitement.

Ce sont les domaines de services qui prennent le relais. Ils peuvent ainsi être à même de rendre une entité persistante, de valider cette dernière ou encore de modifier les valeurs d’une entité.

Un domaine de service doit respecter ces quelques principes :

  • Il doit utiliser les ObjectModel existants pour l’écriture des entités, si ces derniers sont disponibles.

  • Lorsqu’il utilise un ObjectModel ou un service legacy, il se doit dès lors d’être placé dans l’espace de noms Adapter.

  • Lorsqu’il réalise une requête SQL et qu’un ObjectModel relatif existe, alors cette requête doit être obligatoirement déléguée au Repository concerné.

  • Lorsqu’un ObjectModel contient une validation de ses propriétés, celle-ci doit être implémentée dans une méthode dédiée avant de faire appel à une méthode de persistance des données telle que add ou update. Ainsi, les exceptions legacy comme...

Installer PrestaShop

1. Prérequis

a. Serveur

L’installation de PrestaShop nécessite un serveur Apache en version 2.2 ou supérieure. 

Il est également possible d’utiliser un serveur Nginx 1.0 ou supérieur.

b. Version de PHP

La version minimale requise de PHP est la version 7.2.5.

Quant à la version maximale supportée, il s’agit de la version 8.1.

c. Extensions

Une série d’extensions PHP doit être activée :

  • CURL

  • DOM

  • Fileinfo

  • GD

  • Iconv

  • Intl

  • JSON

  • Mbstring

  • OpenSSL

  • PDO

  • PDO (MySQL)

  • SimpleXML

  • Zip

d. Réglages

Certains réglages du serveur doivent également être réalisés.

C’est notamment le cas de la directive allow_url_fopen, qui doit être activée. Il s’agit d’un prérequis fondamental pour le bon fonctionnement des moyens de paiement.

Voici les réglages souhaités au sein de votre fichier de configuration (php.ini) :

extension = php_mysql.dll 
extension = php_gd2.dll 
allow_url_fopen = On 
allow_url_include = Off 

e. Outil de vérification automatique

Durant l’installation de PrestaShop, une vérification des prérequis est effectuée automatiquement.

Toutefois, vous pouvez également vous assurer que l’environnement utilisé respecte l’ensemble des prérequis en utilisant un outil dédié : PhpPSInfo.

Ce script, à la manière d’un phpinfo(), liste l’ensemble des prérequis techniques et indique les éventuels manquements.

Il est téléchargeable à cette adresse : https://github.com/PrestaShop/php-ps-info

Vous pouvez soit télécharger ce dernier et le placer sur votre FTP, soit cloner directement le dépôt.

Une fois cela fait, ouvrez le fichier phppsinfo.php sur votre domaine.

L’ouverture du lien vous demande un nom d’utilisateur et un mot de passe. Par défaut, il s’agit de prestashop pour les deux.

Vous pouvez modifier la valeur de ces deux éléments en ajoutant les variables d’environnement PS_INFO_LOGIN et PS_INFO_PASSWORD.

Vous pouvez désormais visualiser le tableau concernant les informations requises ou recommandées et celles qui sont actuellement sur votre serveur.

images/01EI04.png

2. Manuellement

a. Via une version packagée

PrestaShop permet de packager son logiciel sous format d’archive...

Mode développeur

1. Préambule

À moins d’utiliser un clone du dépôt GitHub, votre installation est effective à l’utilisation en mode production.

Lors de vos développements, il est vivement conseillé de modifier quelques paramètres permettant de débloquer des outils utiles lors de vos conceptions de modules ou de thèmes.

2. Activation du mode

Vous pouvez activer le mode développeur de trois manières.

Modification du fichier defines.inc.php

En éditant le fichier defines.inc.php situé dans le répertoire config, vous pouvez modifier la valeur de la constante _PS_MODE_DEV_ de false à true.

Ajout de la constante dans defines_custom.inc.php

Vous pouvez ajouter le fichier defines_custom.inc.php au sein du répertoire config afin d’y définir les valeurs des constantes souhaitées.

Celui-ci n’existe pas par défaut.

<?php 
# Fichier : config/defines_custom.inc.php 
define('_PS_MODE_DEV_', true); 

Via le back-office

Dans l’onglet Performances du back-office, vous pouvez également activer l’option Mode debug ; cette activation a pour effet de modifier le fichier de la façon vue dans la première option.

3. La fonction dump() et dd()

Lorsque le mode développeur est actif, vous pouvez utiliser la fonction dump() appartenant au composant VarDumper de Symfony.

Celle-ci permet, à l’instar de la fonction var_dump(), d’afficher le contenu d’une variable en y apportant la possibilité de parcourir...

Mettre à jour PrestaShop

La mise à jour du logiciel PrestaShop au fur et à mesure des nouvelles publications de versions vous permet de bénéficier des correctifs et améliorations réalisés entre deux versions.

Plus vous tardez à effectuer la mise à jour d’une version à l’autre, plus vous avez de risques de voir vos développements ralentis ou devant subir une revue plus complète.

Le numéro de version de PrestaShop suit la règle SemVer (Semantic Versioning) depuis la version 8.

Manuelle ou automatique, toute mise à jour nécessite tout d’abord de réaliser un backup de votre installation et est vivement déconseillée en production.

1. Manuellement

Au moment d’écrire ces lignes, cette méthode n’est pas fonctionnelle à cause d’un bug interne.

La mise à jour d’une boutique PrestaShop se déroule comme pour la majorité des applications web : une mise à jour des fichiers et de la base de données.

La mise à jour des fichiers se fait en téléchargeant la nouvelle version packagée et en transférant celle-ci dans votre dossier racine. Cela a pour effet de remplacer les fichiers existants (et donc d’écraser vos modifications éventuelles) et d’y ajouter les nouveaux fichiers.

Une fois les fichiers en place, il vous est désormais possible d’effectuer la mise à jour de vos données.

La mise à jour des données se fait par le biais du module « Mise à jour en 1 clic » (1-Click Upgrade).

Vous pouvez maintenant ouvrir l’URL suivante dans votre navigateur : https://votredomaine.fr/modules/autoupgrade/upgrade/upgrade.php

Vous pouvez également utiliser la ligne de commande qui suit :

php modules/autoupgrade/upgrade/upgrade.php 

La mise à jour du module autoupgrade en sa toute dernière version est vivement conseillée au préalable.

2. Automatique...

Le back-office

PrestaShop dispose d’un back-office relativement vaste permettant de gérer l’ensemble du contenu de sa boutique : les catégories, les produits ou encore les pages CMS.

L’objectif visé par cet ouvrage n’étant pas de couvrir l’utilisation de PrestaShop et de son back-office, nous allons uniquement passer en revue quelques onglets et paramètres utiles au développement.

1. Informations

Cette page vous indique un ensemble d’informations utiles sur le serveur utilisé, la base de données, la configuration des e-mails ainsi que la liste des fichiers modifiés et les surcharges présentes sur la boutique.

Elle présente cet ensemble d’informations, mais ne vous permet aucune modification de ces valeurs.

Elle est avant tout utile lorsque vous prenez en main pour la première fois une boutique en tant que développeur externe.

2. Paramètres généraux

Divers paramètres peuvent être gérés par le biais de cette page.

Vous pouvez ainsi activer le mode SSL ou encore configurer le type d’arrondi utilisé sur la boutique.

C’est également sur cette page que vous pouvez activer le mode multiboutique.

3. Mode multiboutique

L’activation du mode multiboutique vous permet d’associer plusieurs boutiques sur le même environnement.

Chaque boutique peut disposer...

Les fichiers de configuration

Désactiver la protection par token du back-office

Chaque page consultée du back-office dispose et transmet un token par le biais de son URL ou de ses données POST.

Ce token constitue une chaîne encryptée des données suivantes, concaténées :

  • Nom du contrôleur courant ($this->controller_name).

  • Identifiant du contrôleur ($this->id, défini par l’identifiant du contrôleur présent dans la table tab).

  • Identifiant de l’employé dans le contexte.

L’utilisation des tokens en back-office est un mécanisme par défaut de PrestaShop. 

Bien qu’il soit déconseillé de désactiver ce mécanisme, il est possible de le faire par le biais de quatre méthodes.

Via le back-office

Dans les paramètres avancés du back-office se trouve l’onglet Sécurité.

Sur ce dernier, vous êtes en mesure de désactiver cette protection en désactivant l’option correspondante.

images/01EI09.png

Via une configuration Apache et mod_headers

SetEnv _TOKEN_ disabled 

Via une congiguration Nginx et ngx_http_headers_module

add_header _TOKEN_ disabled; 

Ponctuellement, via la déclaration de votre AdminController

 /** @var bool */ 
private $allowAnonymous = true;