L’association Friends of Presta dont je fait partie organise son 3 ème FOP Day le 12 juin 2023 à Lyon.
Cet événement est destiné à un public plutôt technique ( Agence / Développeurs / Marchants techniques ) et c’est également l’occasion de rencontrer pour de vrai les acteurs de l’éco-système Prestashop 🙂 autour de conférences animées par des experts dont voici le programme :
C’est également l’occasion de partager du bon temps pendant les restaurants qui entourent les conférences. Pour ma part après avoir déjà participé aux 2 premières éditions je serais à nouveau de la partie 🙂
Si vous souhaitez vous inscrire toutes les informations nécessaires sont disponibles ici : https://shop.friendsofpresta.org/14-pass-fop-day.html…
Une fois n’est pas coutume ce n’est pas un article technique, mais de présentation d’une superbe ressource sur Prestashop qui vient de sortir. Le livre « Développez avec Php pour Prestashop » est une vrai bible sur la solution Prestashop qui va présenter un peu près tout ce qui est possible de savoir sur la solution 🙂
Architecture du système prestashop
Fonctionnalité de bases
Personnalisation de la solution à travers les modules
Gestion des thèmes
…
Ce livre est écrit par Jonathan Danse qui est un expert reconnu dans l’écosystème de Prestashop et qui travaille avec la solution depuis 2010 ( ça fait quelques années de connaissances accumulées 😀 ) Je conseille ce bouquin à tous les développeurs Prestashop confirmés ou non, pour ma part j’ai appris pas mal de notions que j’ignorais malgré mes longues années de travail sur Prestashop également.
PS : Je précise que ce n’est absolument pas un lien d’affiliation je ne gagne rien à partager ce lien, mais c’est une ressource qui mérite d’être connue 😉 Je présenterais prochainement un autre ouvrage sur le sujet, dans lequel je suis un peu plus impliqué 🙂…
Les Content Security Policies ( CSP ) vous permettent d’améliorer la sécurité de votre site web et d’éviter les injections de contenus externes. J’avais déjà fait un article sur leur utilité il y’a quelques années dans le cadre du passage au https : Détecter vos contenus mixtes avec les CSP Je ne vais pas parapher plus en détails leurs fonctionnement car il existe de très bonnes ressources sur le sujet :
Il est important de noter tout de même qu’il existe plusieurs modes de CSP avec des noms assez explicites : – Content-Security-Policy : Le fonctionnement normal – Content-Security-Policy-Report-Only : Fonctionnement « Debug » qui permets de récupérer les erreurs et avertissements en vue d’une correction.
Implémentation dans Prestashop
Pour l’implémenter dans Prestashop nous allons définir les CSP via un header http que nous pourrons définir directement en php Pour cela il est possible d’utiliser le hook ActionControllerInitBefore qui est appelé assez tôt dans le workflow de l’ensemble des controllers ( Front / Back ) Voici comment je l’ai implémenté :
/**
* Avant l'initialisation du controller on va définir les CSP
* @param array $params
* @return void
* @throws PrestaShopException
*/publicfunction hookActionControllerInitBefore(array$params): void
{if(Configuration::get($this->configPrefix.
Vous souhaitez afficher des contenus éditables depuis l’administration un peu partout dans votre thème ? C’est très facile à faire et nous allons voir comment. ( Pour un usage basique directement dans les fichiers smarty ) L’idée est d’utiliser les pages cms de Prestashop. Pour les ranger, vous pouvez faire une catégorie cms désactivée « Blocs Cms » et mettre toutes les pages dedans.
Pour gérer l’affichage nous allons créer un module hhcmspagewidget Et le contenu de la page de démo sera le suivant.
Fonctionnement basique
Pour un fonctionnement de base le code suivant sera suffisant
class Hhcmspagewidget extends Module implements WidgetInterface
{publicfunction __construct(){$this->name='hhcmspagewidget';$this->tab='others';$this->version='0.1.0';$this->author='hhennes';$this->bootstrap=true;
parent::__construct();$this->displayName=$this->l('Hh Cms page widget');$this->description=$this->l('Allow to display cms page as block through a widget');}/**
* [FRONT OFFICE] Widget utilisé pour afficher le bloc cms
* @param string $hookName
* @param array $configuration
* @return string
*/publicfunction renderWidget($hookName=null,array$configuration){if(isset($configuration['id_cms'])){return$this->getWidgetVariables($hookName,$configuration);}return'';}/**
* [FRONT OFFICE] Widget utilisé pour récupérer les informations d'affichage
* @param string $hookName
* @param array $configuration
* @return string
*/publicfunction getWidgetVariables($hookName=null,array$configuration){
try {$idCms=(int)$configuration['id_cms'];$cms=new CMS($idCms,$this->context->language->id);//Exécution du hook pour appliquer le filtrage des contenus cmsif(false!=
Petit tutoriel rapide aujourd’hui sur une optimisation que j’ai voulu faire cette semaine et qui s’est avérée un peu plus embêtante que prévue. Le besoin est relativement simple je veux déplacer le contenu des commentaires dans les onglets affichés sur la fiche produit. ( Dans un thème basé sur classic ) Les commentaires utilisent le module natif de Prestashop productcomments L’affichage du contenu des onglets est géré par le hook displayProductExtraContent Voici une capture du comportement avant :
Et voici une capture du comportement que je souhaite obtenir après.
Plusieurs approches techniques sont possibles pour faire cela, pour ma part j’ai choisi de le faire un module complémentaire hhproductcomments qui dépends du module natif productcomments. Cela présente l’avantage de ne pas toucher devoir toucher ni au module natif, ni au thème pour gérer cet affichage. L’idée est de greffer ce nouveau module sur le hook displayProductExtraContent pour gérer l’affichage en onglet et d’appeller le hook natif displayFooterProduct du module productcomments
Le gros point d’attention à avoir , c’est que la fonction hookDisplayFooterProduct attends une instance de \PrestaShop\PrestaShop\Adapter\Presenter\Product\ProductLazyArray et non pas un instance du produit ( Product ) telle qu’on la reçoit dans le hook initial.…
Cette article inaugure une nouvelle série d’articles à venir sur comment étendre les entités Prestashop sans surcharges. C’est connu depuis très longtemps qu’il est déconseillé d’utiliser les surcharges pour ajouter des champs, pour autant il n’y avait pas forcément d’autres solutions, c’est de moins en moins vrai 🙂
Ce tutoriel est uniquement compatible avec les versions de Prestashop supérieures à la 1.7.6 ( Lorsque la page de gestion admin est passée sous symfony ) Mais le hook essentiel filterCategoryContent est présent depuis la version 1.7.1 La même logique avec une autre gestion dans l’administration est donc possible.
Pour l’exemple nous allons donc créer un module hh_categoryfields qui va ajouter 3 champs aux catégories :
Code erp , type texte commun à toutes les langues et tous les sites
Description SEO , type texte avec possibilité de le traduire pour chaque langue installée dans chaque boutique
Image : Image commune à toutes les langues et tous les sites.
Ajout des champs dans le formulaire d’édition admin
Je suis amené à devoir tester le fonctionnement de mes modules sur pas mal de versions différentes de Prestashop, souvent en navigation privée. Ce qui nécessite de saisir l’email et le mot de passe de l’administration pour s’y connecter. Voici un petit module qui pourra vous faire gagner du temps sur des instances de développement ( ce n’est évidemment pas fait pour un site en production ) Celui ci s’appellera hhadminautologin et il super basique :
On rajoute simplement un petit javascript dans la page de login dans l’administration. Et celui-ci va remplir les champs email et mot de passe avec les valeurs configurées, puis soumettre le formulaire de long Les valeurs sont en dur dans le module, mais il serait tout à fait possible de rajouter une configuration du module dans l’administration.
C’est parti pour le code Fichier hhadminautologin/hhadminautologin.php
<!--?php
if(!defined('_PS_VERSION_')){exit;}class HhAdminAutoLogin extends Module
{publicfunction __construct(){$this->name='hhadminautologin';$this->tab='others';$this->version='0.1.0';$this->author='hhennes';$this->bootstrap=true;
parent::__construct();$this->displayName=$this->l('Hh Admin Auto Login');$this->description=$this->l('Avoid to log in admin website');}/**
* Installation du module
* @return bool
*/publicfunction install(){if(!
L’écosystème Prestashop évolue rapidement en ce moment, et sur ce blog je partage des astuces sur cette solution depuis déjà pas mal d’années. L’information telle qu’elle est écrite au moment de la rédaction d’un article n’est du coup plus forcément vraie quelques mois ou années plus tard.
Afin de préciser les compatibilités de l’article avec telle ou telle version de Prestashop j’avais déjà mis en place dans l’entête un bloc récapitulatif des versions compatibles. Et en complément sur les articles qui datent de plus d’un an je rajoute également un bloc avec cette information.
Je pense que c’est assez exhaustif et que cela permets déjà d’avoir une idée sur la pertinence de l’information. En revanche le gros inconvénient c’est que je passe devrait passer régulièrement sur l’ensemble des articles pour vérifier que l’information est toujours d’actualité.
Optimisation
A compter d’aujourd’hui les choses changent et j’ai introduis 2 nouveautés :
Tous les visiteurs pourront évaluer le fonctionnement des articles avec leur version de Prestashop.
On pourrait également compléter le titre également par : « Ville / Nom … «
C’est une demande qui revient assez régulièrement et qui est d’autant plus d’actualité avec le confinement actuel. Comment restreindre un transporteur à un certain code postal ?
Ceci permets par exemple de créer un transporteur de clic and collect délimité à certains codes postaux.
C’est très facile à faire dans Prestashop, mais cela nécessite la création ou l’achat d’un module.
Nous allons voir comment procéder techniquement pour faire cela. Ce tutoriel est valide à la fois pour les versions 1.6.x et 1.7.x de prestashop
Principe de fonctionnement général
Dans Prestashop les activations ou prix des transporteurs sont définis par zones géographiques : Celles-ci sont visibles dans l’administration via « International / Zones Géographique »
Il est ensuite possible de voir la corrélation entre les 2 lorsque nous allons éditer un transporteur. Via « Livraison / Transporteur » , éditer un transporteur et dans l’onglet « Destination d’expéditions et coûts » Par exemple le transporteur de la capture ci-dessous est actif uniquement pour les zones « Europe » et « Amérique du Nord »
Comme le nom des zones est très explicite on peut aisément comprendre que les clients habitant en France feront automatiquement partie de la zone Europe , et c’est bien le cas dans la configuration de prestashop
Cependant il existe une possibilité disponible uniquement via le code qui est d’assigner automatiquement une zone à une adresse en fonction de ses paramètres.…
Ces derniers mois ( voir depuis plus longtemps :/ ) les spams se sont attaqués en masse au formulaire d’inscription à la newsletter sur Prestashop.
J’ai déjà fait un module de captcha qui permets de régler le problème des spams sur le formulaire de contact et la création des clients depuis plusieurs années. La demande de pouvoir rajouter un captcha sur la newsletter était déjà récurrente, mais il n’y avais pas de solution simple et rapide pour le mettre en place.
La bonne nouvelle est que depuis la sortie de la version 2.6.0 du module ps_emailsubscription grâce à une pull request de l’inévitable Jean-François Viguier ( https://github.com/PrestaShop/ps_emailsubscription/pull/49/files )
Il est possible via des nouveaux hooks d’implémenter facilement un captcha sur l’inscription newsletter.
Le hook à utiliser est displayNewsletterRegistration et il est implémenté dans le fichier modules/ps_emailsubscription/views/templates/hook/ps_emailsubscription.tpl