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/

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.

Magento 2 module pour visualiser les pdfs dans le navigateur

J’avais rencontré la même problématique sur un développement prestashop ( cf. https://www.h-hennes.fr/blog/2020/07/13/prestashop-gagnez-du-temps-lors-la-personnalisation-des-fichiers-pdf-factures-livraisons/ ), dans le cas ou on souhaite personnaliser les fichiers pdfs pour changer des éléments ou de la mise en forme c’est relativement pénible de devoir à chaque fois télécharger le fichier pdf pour le visualiser.

J’ai donc créé un module magento 2 pour visualiser les pdf dans le navigateur , celui-ci fonctionne pour les pdfs suivants dans l’administration

  • Factures ( Invoices )
  • Livraisons ( Shipping)
  • Avoirs ( Creditmemo )

Celui-ci a uniquement été testé sur Magento 2.4.
Le module est disponible sur mon dépot github avec des exemples d’extensions magento 2.
https://github.com/nenes25/magento2_samplemodules/tree/master/Hhennes/SalesAdminPdfViewer

Configuration

Il est possible d’activer ou non l’affichage des pdfs via la configuration dans :

Configuration / Hhennes Extensions / Pdf Print

Penser à vider le cache une fois la modification appliquée, et une fois celui-ci actif les fichiers pdfs sont affichés directement dans le navigateur :

Il est ensuite possible de voir les changements dès le rafraîchissement de la page, et sans devoir télécharger le fichier.…

WordPress hacké , que faire ?

Suite à la remarque d’un visiteur ( que je remercie encore au passage ), j’ai découvert récemment que le blog avait été hacké et que du contenu de spam était hébergé sur mon domaine.
Ce blog comme beaucoup d’autres utilise WordPress, et à la fois la version globale de WordPress et les plugins sont mis à jour régulièrement.
Je n’ai pas trouvé quelle est la faille initiale qui a permis l’envoi de fichier compromis.
En revanche voici comment j’ai procédé pour corriger.

Installer le plugin WordFence

Après quelques jour du jeu de la chat et la souris de suppression manuelle des fichiers qui revenaient quelques heures plus tard, je me suis décidé à chercher un plugin qui pourrait corriger cela tout seul.

J’ai trouvé Wordfence : https://fr.wordpress.org/plugins/wordfence/ qui est noté plus de 4,5/5 sur près de 4 millions d’installations.
C’est un module freenium ( version gratuite mais avec des fonctionnalité avancées payantes)
La version gratuite est tout à fait suffisante.
L’outil permets de faire directement un scan des fichiers du core wordpress ainsi que de l’ensemble des plugins installés:
Il identifie l’ensemble des fichiers modifiés et permets de visualiser les différences, et même de corriger et nettoyer les fichiers directement depuis le back office en un clic.…

Nouveau design pour le blog

Vous l’aurez certainement remarqué, mais le blog vient de faire peau neuve !

L’ancien design design datait de 2013, et j’avais uniquement fait quelques optimisations mobiles en 2015.
Il était donc temps de changer cela.

Le design et les technologies front n’étant pas forcément le point qui m’intéressent le plus, je suis parti sur un thème relativement populaire dans la communauté WordPress.
Sur lequel j’ai rapidement changé quelques couleurs mais rien de très élaboré.
N’hésitez pas à remontez votre avis et à signaler si il y’a des petites coquilles à des endroits.

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

Mysql : identifier les tables manquantes entre 2 bases de données

Un petit article pratique assez générique pour une fois.

Pour un projet récent il fallait que je puisse détecter les tables manquantes entre une base de données « native » et la base de données du projet.

Il existe un certain nombre de logiciels qui le permettent mais je n’en avais pas sous la main.
Navicat permets d’identifier les tables concernées mais pas d’en exporter la liste.

La solution donnée ici permettra de faire tout en ligne de commandes ( linux )

J’ai utilisé l’outil https://github.com/DBDiff/DBDiff comme base.

Il faut commencer par télécharger le phar

wget https://github.com/DBDiff/DBDiff/releases/download/v1.0.0/dbdiff.phar

Ajouter les droits d’exécution au fichier.
Il faut ensuite configurer une connexion pour l’outil dbdiff ( dans le même dossier ou vous allez placer le phar )
Pour cela il faut créer un fichier .dbdiff ( attention au . devant ) avec les identifiants de connexions

server1:
  user: user
  password: password
  port: 3306 # for MySQL this is 3306
  host: 127.0.0.1 # usually localhost or 127.0.0.1
#Mettre la configuration des autres serveurs si nécessaires
server x:

L’outil dbdiff permets ensuite de générer nativement un fichier sql récapitulatif des différences via la commande :

.