Activer les hooks dans une page CMS PrestaShop

Normalement le contenu des pages CMS est statique dans PrestaShop mais il peut être utile d’y afficher un module pour mettre les dernières réductions, un formulaire d’inscription ou n’importe quoi.

Pour cela il faut modifier le fichier cms.tpl du thème de la boutique.

devient

ça permet au contenu d’être interprété par Smarty avant l’affichage et on peut donc mettre les appels aux hooks dans sa page CMS sous la forme  {hook h='displayCarousel'}  (voir la doc).

En fait cela permet aussi d’utiliser toute la syntaxe de Smarty, les foreach , include  et tout le reste

Supprimer une boutique PrestaShop

Voici un script qui supprime une boutique PrestaShop. Il suffit de le placer à la racine de sa boutique en FTP ou autre et de le visiter avec son navigateur.

⚠ Le script supprime le répertoire de PrestaShop avec tous ses fichiers et sous répertoires et toutes les tables de la base de données qui ont le préfix de PrestaShop.

⚠⚠ Le script ne demande pas de confirmation. Vous le lancez, il supprime tout.

 

Exécuter un script PrestaShop en ligne de commande

Le plus propre pour lancer un script prestashop en ligne de commande est de créer un controller pour ça.

Pour l’appeler voici la syntaxe :

Soit dans mon cas

Ensuite le code du controller

 

La mauvaise foi du sécuritaire chez Prestashop

Je suis déçu par Prestashop 🙁

  • Les erreurs de jeunesse que la solution traîne comme des boulets, je comprend.
  • Les bugs (d’arrondi) gros comme le monde qui durent depuis la version 1, je tolère.
  • Les publicités de plus en plus présentes et agressives dans le panneau d’administration, je n’aime pas mais je comprend

mais là c’est moche, d’une mauvaise foi évidente et joue sur la peur de ses clients au détriment de ses (anciens ou futurs anciens) partenaires.

Note : J’aime Prestashop et Prestashop Addons c’est un beau projet, une belle plateforme que je suis depuis le début. Ils me font vivre et je leur rend pas assez. Mais il y a des comportements qui me sortent par les yeux.

Donc que ce passe-t-il ?

Depuis la version 1.6.0.9 (dernière à ce jour) si on veut installer un module non présent sur Prestashop Addons, un gros (GROS) message s’affiche avec des couleurs alarmantes, un bouton de validation rouge et un message qui fait trembler :

Le module “XXX” n’a pas pu être identifié en toute sécurité par PrestaShop.

Ceci se produit généralement lorsque le module n’est pas distribué via notre place de marché officielle PrestaShop Addons, ou quand votre serveur n’arrive pas à communiquer avec PrestaShop Addons.

Comme vous n’avez pas téléchargé le module depuis PrestaShop Addons nous ne pouvons pas certifier qu’il est conforme à nos exigences de sécurité (notamment, nous ne pouvons pas certifier qu’il n’ajoute pas de fonctionnalités cachées comme un cheval de troie, des publicités, des liens cachés, du spam, etc.). Vous l’utilisez à vos propres risques.

blablabla peur blablabla vous avez eu tord blablabla Achetez chez nous

Image prise chez webbax qui parle du même sujet : https://www.webbax.ch/2014/08/27/prestashop-alerte-module-non-verifie/

Le message est (presque) vrai, on ne peut rien en dire sauf qu’il est d’une mauvaise foi dégoulinante. Un peu comme quand vous cliquez sur un lien externe sur Facebook : “Attention, vous allez dans le côté obscur du web, là où les pédonazies mangent des chatons en fumant dans les halls de gare. Vous feriez mieux de rester chez nous.”

Pourquoi est-ce de la mauvaise foi ?

  1. Un module malveillant n’attendra pas d’être installé pour faire ses petites affaires. Si vraiment il a besoin d’être installé il peut le faire sans vous. A partir du moment ou il s’affiche dans la liste des modules c’est mort. Donc si vraiment le module est vilain ce message ne sert à rien.
  2. Contourner l’affichage de ce message est trivial. Dans pas longtemps les modules honnêtes mais non présents sur Addons le feront pour ne pas effrayer les commerçants.
  3. Le but n’est pas de protéger le commerçant (cf 1) mais de rediriger vers Addons, C’est évident, c’est moche c’est crade. On accuse le commerçant ( “Comme vous n’avez pas téléchargé” ) de mal agir et que tout sera sa faute ( “Vous l’utilisez à vos propres risques.” ) après l’avoir bardé de mots qui font peur. Ensuite plus sereinement on explique qu’un module similaire existe surement sur Addons et qu’on peut revenir à la sécurité (ouf)

Quel est le vrai but ?

  1. Vendre des modules c’est évident mais pas que.
  2. Supprimer les modules gratuits indépendants. Avez vous remarqué qu’il y a de moins en moins de modules gratuits sur Addons ? ça fait un moment qu’on ne peut plus en ajouter mais les anciens restaient. Pourtant récemment deux des miens ont été effacés car “Pas assez de ventes” (héhéhé). Donc les modules gratuits ne sont plus validés par Addons et auront tous ce message. Mais pas d’inquiétude un payant existe surement sur Addons
  3. Supprimer la concurrence et faire plaisir aux partenaires. Il y a plein de boutiques de modules indépendantes et quelques autres places de marché dédiées. Evidemment le message apparaîtra si leurs modules ne sont pas sur Addons. Mais pourquoi ? Par exemple il est impossible de déposer sur Addons un module de paiement (Crédit Agricole, LCL…) Prestashop a déjà les siens ou un module similaire à un de leurs partenaires (qui payent pour être mis en avant sur Addons). Mais des modules de paiements indépendant il y en a plein (et même des gratuits) et ça c’est pas bon pour les affaires.

Conclusion

Je comprend tout à fait la position de Prestashop et d’Addons.

Addons est ce qui rapporte des sous à Prestashop. Il faut le mettre en avant. La solution gratuite n’est (commercialement parlant) qu’un appel à l’achat sur la plateforme. Pas de problème avec ça. Tuer la concurrence, c’est du commerce. Oui oui ok. Les partenaires veulent un retour sur l’investissement, les vrais clients c’est eux. Normal.

Mais jouer sur la peur des commerçants, et en plus trop tard, quand même c’est crade. A côté de ça les pubs cachées de “Expertise Prestashop” passent pour des enfantillages.

Prestashop tu vaux mieux que ça.

P.S. un cheval de Troie (majuscule, c’est une ville) n’est pas une fonction cachée mais un camouflage, le module peut être un cheval de Troie mais pas en cacher un. Mais bon fallait placer des mots qui parlent aux gens et qui font peur. “Tremmmblez devant les liens cachés, bhooooo”

Un souhait pour Prestashop 2

Prestashop 2 est prévue pour bientôt ou pas, quoi qu’il en soit il y a un truc qu’il faudra absolument améliorer, c’est le système de messages utilisateur (erreur, confirmation, alerte).

Actuellement ça se passe ainsi :

  1. On clique sur un lien d’action. par exemple http://…?send_mail&id_client=42 pour envoyer un mail à un client
  2. on arrive sur la page qui fait l’action (page d’action)
  3. si ça marche, on est redirigé sur une page qui affiche une confirmation http://…?conf=33 conf étant l’id du message de confirmation
  4. si ça échoue, on reste sur la page et on affiche les erreurs.

La redirection est importante car si on restait sur la page d’action, il suffirait de la recharger pour exécuter de nouveau l’action ou de laisser l’onglet ouvert avant de fermer le navigateur. Pour un mail c’est pas trop grave, pour une suppression plus.

Donc tant que qu’il n’y a pas d’erreur ça marche (bin oui) mais sinon on reste sur la page d’action et c’est mal.

Vous allez dire que c’est pas grave puisque ça marche pas, il n’y a pas de risque que le mail soit envoyé si je recharge la page et si ça marche bin c’est cool c’est ce que je voulais.

Non. déjà ça peut être une erreur temporaire donc ça peut très bien fonctionner la seconde fois.

Ensuite on ne sait pas à quel moment ça a échoué. Si il fallait supprimer une commande puis envoyer un mail au client en rechargeant la page vous pouvez supprimer 3 commandes et à chaque fois ne pas réussir à envoyer les mails.

Bref le système est bancal.

En plus il est très limité :

  • Il y a un id de message de confirmation donc il y a une liste prédéfinie de message (31 dans la classe AdminControllerCore) donc si vous voulez utiliser une confirmation personnalisée ça devient compliqué.
  • Vous ne pouvez avoir qu’un seul message. Pour reprendre l’exemple on ne peut pas dire “la commande est supprimée” et “le mail est envoyé” et bien sûr on ne mixe pas (“la commande est supprimée” et “Erreur, le mail n’est pas envoyé”)
  • Si je recharge la page, j’ai de nouveau le message ce qui peut être perturbant et pas joli.

Ce qu’il faudrait c’est un vrai gestionnaire de message.

Quand quelque chose fait une action il dit “Faudra dire à untel/tout le monde/personne que j’ai fait ça” ou “Faudra dire qu’il y a cet erreur/alerte/information” comme pour un système de log (c’est la même chose en fait).

Par exemple

(bon là y a des if partout mais c’est l’idée)
et au prochain affichage d’une page on montre les messages en attente.

Ce serait utile pour les modules aussi. Le module Ebay par exemple met à jour la fiche produit sur ebay.com à chaque fois qu’on en modifie un sur Prestashop mais il peut pas le dire, l’info est perdue à la redirection. Là il pourrait mettre en attente “tel produit est à jour/désactivé/supprimé sur ebay.com” ou “impossible de contacter ebay.com”.

Donc tout ça pour dire que ce serait un truc super pratique.

Exemple d’override pour Prestashop

Ce message se veut être un complément au billet de Webbax

J’ai eu à travailler sur l’override de Prestashop. Ce n’est pas compliqué, en tout cas beaucoup plus simple que de modifier les fichiers “cœurs” de Prestashop et si c’est bien fait beaucoup plus stable.

Le but était de rajouter trois Hooks génériques : un pour l’ajout d’un Objet (produit, fabriquant, bon de réduction…), un pour sa mise à jour et un pour sa suppression.

Dans les versions 1.3 et précédentes j’aurais dû modifier le fichier classes/ObjectModel.php qui est un peu complexe et faire une version pour chaque version de Prestashop.

Mais là que du bonheur, il faut créer un fichier override/classes/ObjectModel.php comme ci-dessous :

C’est petit hein ?

Le principe est simple, pour chaque méthode (add(), update() et delete() ), on laisse l’objet parent faire son travail ( parent::add() ) et en fonction du résultat on appelle ou non le hook.

Ainsi on a pas touché au cœur de Prestashop, le fichier ajouté est simple et facile à maintenir et surtout il sera compatible avec les futures version de Prestashop.

Module Prestashop : Bon de réduction sur commentaire

Une étude de l’agence Chadwick Martin Bailey menée sur 1500 personnes aux Etats-Unis a mis en évidence qu’une personne sur cinq a comme premier critère de choix les avis des internautes.

Il est donc très important d’avoir des commentaires sur vos produits pour inciter les visiteurs à commander chez vous.

Ce module motive les utilisateurs à commenter et discuter sur vos produits en leur créant un bon de réduction à chaque fois qu’un de leurs commentaires est validé.

Vous pouvez définir tous les détails du bon de réduction à créer ainsi que les conditions de création :

  • Taille minimal du message,
  • nombre minimum de commande
  • Groupe du client,
  • Exclure des produits individuellement,
  • Exclure des clients individuellement

De plus ce module affiche en page d’accueil de l’administration les commentaires à
valider.

Module Prestashop : Mise à jour facile de Prestashop

La mise à jour de Prestashop est un processus long et dangereux. En cas d’erreur vous pouvez perdre toutes vos données ou votre boutique peut être inutilisable.

Ce module vous permet de mettre à jour facilement et en toute sécurité Prestashop en un seul clic.

Le processus de mise à jour dure normalement moins de 5 minutes.

Démonstration vidéo en temps réel

Les fichiers et bases de données sont sauvegardés avant toute modification, donc si quelque chose se passe mal, tout est automatiquement restauré.

Le module PrestaShop Easy Update vous apporte la sécurité de conserver vos données facilement.

Démonstration vidéo de restauration des données en temps réel

Pour que la mise à jour fonctionne vous devez avoir assez d’espace disque sur votre serveur pour la sauvegarde de vos fichiers et de votre base de donnée ainsi que de l’archive de la mise à jour.
De plus vos fichiers doivent être accessible en écriture par PHP, puisqu’ils seront remplacés pour la plupart.

Module Prestashop : Réduction multiples

Ce module permet de créer des réductions en fonction de nombreux critères : Le produit, son fabriquant, sa catégorie, le groupe du client et bien sur la date.

Vous pouvez avoir autant de combinaisons que vous le souhaitez.

Par exemple vous pouvez appliquer une réduction de 5% sur toute votre boutique pour les clients du groupe “Bon clients” ou alors juste sur la catégorie “Accessoires”.

Les autres clients ne verront pas la réduction.