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: Afficher les commentaires produits dans les onglets de la fiche produit

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.…

Prestashop: Afficher les commentaires produits dans les onglets de la fiche produit Lire la suite »

Prestashop : Ajouter des champs à une catégorie

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

Pour l’ajout des champs dans le formulaire d’administration j’ai déjà détaillé le concept de fonctionnement dans l’article : https://www.h-hennes.fr/blog/2019/08/05/prestashop-1-7-ajouter-des-champs-dans-un-formulaire-dadministration/

Prestashop : Ajouter des champs à une catégorie Lire la suite »

Nouvelle fonctionnalité : Évaluez la compatibilité de l’article avec votre version de Prestashop

Constat

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.

Nouvelle fonctionnalité : Évaluez la compatibilité de l’article avec votre version de Prestashop Lire la suite »

Prestashop : Restreindre un transporteur par code postal

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 »

Zones de livraisons

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 »

Zones de livraison sur un transporteur

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

 

La France est bien en zone Europe

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.…

Prestashop : Restreindre un transporteur par code postal Lire la suite »

Prestashop : Ajouter un captcha sur l’inscription à la newsletter

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

<div class="email_subscription block_newsletter" id="blockEmailSubscription_{$hookName}">
  <h4>{l s='Newsletter' d='Modules.Emailsubscription.Shop'}</h4>
  {if $msg}
    <p class="notification {if $nw_error}notification-error{else}notification-success{/if}">{$msg}</p>
  {/if}
  <form action="{$urls.current_url}#blockEmailSubscription_{$hookName}"

Prestashop : Ajouter un captcha sur l’inscription à la newsletter Lire la suite »

Prestashop : gérer les images produits via l’api

En compléments des informations déjà disponible sur la documentation développeur de prestashop sur la gestion globale des images : https://devdocs.prestashop.com/1.7/webservice/tutorials/advanced-use/image-management/
Cet article détaille brièvement la gestion des images des produits via l’api sous Prestashop.

Les tests ont été fait sur une version 1.7.6.x de prestashop mais l’api ayant assez peu bougé cela doit être fonctionnel sans doute sur les versions 1.6 également.

Le point essentiel à retenir dans les api étant qu’une url peut avoir un comportement différent en fonction de la méthode par laquelle elle est appellée ( GET / POST / PUT )

Je pars du principe que les accès nécessaire à l’api sont déjà définis, et la gestion de l’api est effectuée via la librairie proposée par Prestashop en php ( cf. https://devdocs.prestashop.com/1.7/webservice/tutorials/prestashop-webservice-lib/ )

Pour mon exemple d’illustration je me sers d’une version démo de prestahop avec les produits de base.
Dont l’url sera http://www.prestashop.local/tests/1769/
Et on va jouer avec l’identifiant produit 19 , le « mug personnalisable »

Les appels webservice qui seront exécuté via la lib Prestashop seront wrappés dans le code suivant
Et je rajoute également une fonction qui va permettre de simplifier les appels à la librairie curl .…

Prestashop : gérer les images produits via l’api Lire la suite »

Prestashop : gérer les emails dans vos modules

Dans cet article nous allons creuser tout de qui concerne la gestion des emails dans les modules prestashop.

Dans un premier temps comment envoyer un email bien sûr, mais nous verrons ensuite qu’il est très facile d’interagir avec les emails systèmes via les hooks.

Ce tutoriel s’applique à la version 1.7 de Prestashop, certains hooks n’existent pas dans la version 1.6  dont le hook hookActionEmailSendBefore , il reste cependant assez facile de les implémenter manuellement en surchargeant la classe Mail

Pour illustrer et tester tout ça nous allons passer par la création d’un module de POC hh_demoemails

L’archive sera disponible en fin d’article, mais je précise bien que c’est un module de démo et d’apprentissage et pas du tout en module destiné à être mis en production 😉

Fonctionnement général

La gestion de l’envoi dans Prestashop est relativement basique car elle est centralisée dans une seule fonction qui est la fonction send de la classe Mail voici ses paramètres, la signature de la fonction est relativement explicite

/**
     * Send Email.

Prestashop : gérer les emails dans vos modules Lire la suite »

Prestashop : Ajout des conditions à valider dans le tunnel de commande

Petite découverte de la semaine d’une possibilité relativement pratique d’ajouter des conditions à valider dans le tunnel de commande.

La bonne nouvelle c’est que c’est très facile à faire via un module puisqu’il existe un hook pour cela 🙂
Voyons donc cela dans un module hhcgv dont voici le code

<?php
if (!defined('_PS_VERSION_')) {
    exit;
}
 
//Attention à bien include ceci
use PrestaShop\PrestaShop\Core\Checkout\TermsAndConditions;
 
class Hhcgv extends Module
{
 
    public function __construct()
    {
        $this->name = 'hhcgv';
        $this->tab = 'others';
        $this->version = '0.1.0';
        $this->author = 'hhennes';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('Module de demo cgv');
        $this->description = $this->l('Ajout de cgv personnalisées');
    }
 
    /**
     * Installation du module
     * @return bool
     */
    public function install()
    {
        if (
            !

Prestashop : Ajout des conditions à valider dans le tunnel de commande Lire la suite »

Prestashop : Ajout rapide des droits pour un groupe utilisateur

Lors de la création d’un nouveau groupe client,
par défaut celui-ci n’aura aucun droit de visualisation sur l’ensemble des catégories du site.

Cela peut poser problème dans le cas ou c’est le seul groupe d’un client.
( La bonne pratique est de laisser par défaut tous les clients dans le groupe « visiteur » également. )

Dans ce cas on obtient une belle page d’erreur lorsqu’on souhaite accéder à une catégorie sur laquelle le groupe n’a pas les droits d’accès

Voici  une petite requête qui permettra de corriger cela facilement.
Attention il est nécessaire de récupérer l’identifiant du groupe client à modifier.
Dans mon exemple l’identifiant du groupe « Pro » est 4

INSERT INTO ps_category_group ( SELECT id_category,4 FROM ps_category WHERE id_category NOT IN ( SELECT id_category FROM ps_category_group WHERE id_group = 4 ))

Prestashop : Ajout rapide des droits pour un groupe utilisateur Lire la suite »