FAQ par module PrestaShop
1015 réponsesQuestions
Le module ne s'affiche que lorsque la boutique n'est pas en mode catalogue et lorsque PrestaShop renvoie plus d'une devise active. S'il n'y a qu'une seule devise active, le hook ne renvoie rien et aucun sélecteur n'est affiché. Le placement dépend aussi du thème, qui doit rendre le hook displayNav2 dans la zone header ou navigation.
Chaque message personnel est construit à partir d'un spécimen : un vrai email exporté depuis votre propre logiciel de messagerie. Le module préserve sa structure, sa signature et sa partie texte brut et ne remplace que le corps pour chaque destinataire. Il n'y a ni pixels de tracking, ni liens réécrits, ni balisage de campagne : le message livré porte la même structure que les emails que votre équipe envoie à la main.
À la livraison, pas à la date de commande. L'article 9, paragraphe 2, point b) de la directive 2011/83/UE fait courir le délai à partir du jour où le consommateur prend physiquement possession du bien, ce qui arrive plusieurs jours après la commande dans la plupart des boutiques.
Le module détermine ce moment à partir de la meilleure source disponible, dans cet ordre : une date de livraison saisie manuellement, une date par expédition issue de MPR Warehouse Revolution, le premier passage de la commande dans un statut marqué comme livraison, la date de livraison enregistrée sur la commande, puis le transporteur.
Si rien n'est connu, aucune échéance n'est fixée et le délai n'a pas commencé. C'est volontaire : une date de départ devinée pourrait clore un droit dont le client dispose encore.
Oui. Le module vise PrestaShop 1.7.7 et versions ultérieures et fonctionne sous 1.7.x, 8.x et 9.x avec PHP 7.1 ou supérieur. Il s'enregistre sur les hooks de la page d'accueil (displayHome / displayHomeIntro) et peut aussi être intégré comme widget, sans modification du cœur.
Une licence à vie pour un domaine avec 3 mois de support et de mises à jour inclus. Les nouvelles versions s'installent par le canal de mise à jour standard depuis votre portail client, et des extensions de support sont disponibles sur la page produit.
Non. L'historique des campagnes, les listes de suppression, les preuves de consentement et le journal d'audit sont délibérément conservés en base de données à la désinstallation, car les enregistrements de suppression et de consentement sont des engagements envers vos clients. Les retirer est une opération de base de données séparée et délibérée.
Mail Revolution prend en charge PrestaShop 1.6 – 9.x sur PHP 7.1 ou plus récent, comme le reste du catalogue mypresta.rocks. Il est compatible multiboutique : campagnes, files et listes de suppression sont cloisonnées par boutique.
Non. Les lettres personnelles partent par la route mail propre de votre boutique et rien dans le module n'exige de compte externe. Pour les newsletters de diffusion, vous pouvez en option brancher un fournisseur SMTP comme identité newsletter dédiée, mais ce n'est pas nécessaire pour utiliser le module.
Les campagnes personnelles en mode manuel retiennent chaque message rendu. La file liste les destinataires par meilleur score d'abord et montre l'email exact que chaque client recevrait, avec le paragraphe personnalisé surligné. Un collègue nommément désigné approuve ou rejette chaque message ; les décisions sont enregistrées avec le compte employé et un horodatage, et modifier un message invalide les approbations antérieures.
Une réponse du client suffit pour se désinscrire des campagnes personnelles, et les newsletters portent toujours des en-têtes de désinscription en un clic. Désinscriptions, bounces et plaintes alimentent une liste de suppression vérifiée juste avant chaque envoi, et un garde-fou un-message-par-campagne empêche les contacts répétés.
La commande n'a qu'une seule échéance, et elle court à partir du dernier colis. L'article 9, paragraphe 2, point b) i) est explicite : lorsque plusieurs biens commandés ensemble sont livrés séparément, le délai commence à la réception du dernier.
C'est précisément là que les procédures de retour tenues à la main dérapent. Si la moitié arrive lundi et le reste vendredi, faire expirer la moitié du lundi en premier revient à refuser un retour que la boutique doit encore accepter.
Le module enregistre la livraison ligne par ligne, ce qui vous montre quand chaque article est arrivé, tout en appliquant une échéance unique à la commande. Les dates par ligne servent vos archives et ne peuvent jamais expirer avant l'échéance de la commande.
Non. Les factures et avoirs déjà émis ne sont jamais réécrits, pas plus que les paiements, les totaux, le détail des commandes, les transporteurs, l'historique, les mouvements de stock ou les expéditions. Une fusion change le propriétaire d'une commande, rien de la commande elle-même. Une adresse à laquelle une commande renvoie conserve son identifiant et tous les champs qui figurent sur vos documents : une ancienne facture décrit donc toujours la livraison réellement effectuée.
Il ajoute le Messenger officiel d'Intercom à votre boutique PrestaShop. Le module insère le loader Intercom juste avant la balise body fermante sur chaque page : vous collez votre App ID Intercom une seule fois au lieu de modifier les templates du thème. Le widget se charge exactement comme le snippet d'installation d'Intercom, en conservant votre boîte de réception, vos visites guidées et vos messages automatisés.
Non, et c'est volontaire. Ce module ne contient aucune téléphonie : pas de numérotation automatique, pas de SIP, pas de Twilio, pas d'enregistrement. Il recueille la demande, vous prévient et vous relance jusqu'à ce que vous la clôturiez. L'appel, vous le passez vous-même, depuis le lien cliquable de la file d'attente.
Si vous avez besoin de numérotation automatique, d'enregistrements ou de statistiques d'agents, il vous faut une plateforme téléphonique hébergée avec un abonnement. Ceci est l'alternative que vous possédez, pour les boutiques qui veulent simplement que le contact arrive et ne soit pas oublié.
Le module construit des événements GA4 à partir d'actions PrestaShop réelles plutôt que d'une simple balise de page vue. Il suit les vues produit, l'ajout au panier et les changements de quantité, le début du paiement, les achats finalisés, les recherches sur le site, les connexions client et la création de compte, chacun envoyé avec les paramètres e-commerce GA4 correspondants. Un générateur d'événements intégré permet aussi de définir des événements personnalisés.
Oui. Le module enregistre son propre sélecteur dans le hook displayNav2 et charge une feuille de style qui masque le sélecteur de devise desktop natif de PrestaShop avec #_desktop_ps_currencyselector { display: none !important; }. Le client voit le menu déroulant compact par symbole du module au lieu du bloc devise par défaut.
Il ne désinstalle ni ne modifie le module de devise natif de PrestaShop. Il rend simplement un menu déroulant de remplacement dans le hook header/navigation et masque le bloc desktop standard avec du CSS. Cela rend le changement réversible : désactivez ou désinstallez le module et le sélecteur natif peut réapparaître, à condition que le thème le rende encore.
Le remplacement utilise le symbole de la devise courante dans le toggle, affiche optionnellement le label ISO à côté, et liste les devises actives dans le dropdown. Les valeurs par défaut sont SHOW_LABEL=0 et SHOW_NAMES=1, donc le toggle reste compact tandis que le dropdown affiche encore les noms complets des devises. Chaque option est un lien nofollow construit avec les paramètres normaux de changement de devise de PrestaShop.
Le placement dépend toujours du thème. Si le thème n’appelle pas displayNav2 dans la zone header ou navigation, le module n’a nulle part où rendre le sélecteur même si les assets sont chargés.
Le module ne se rend que lorsque la boutique n’est pas en mode catalogue et lorsque PrestaShop renvoie plus d’une devise active. S’il n’y a qu’une seule devise active, le hook ne renvoie rien, donc aucun sélecteur ne s’affiche. Le placement dépend aussi du thème qui doit rendre le hook displayNav2 dans la zone header ou navigation.
Vérifiez d’abord ces points :
- Catalog mode : si le mode catalogue est activé, le sélecteur renvoie volontairement une chaîne vide.
- Nombre de devises : le module appelle la liste de devises actives de PrestaShop et se masque quand cette liste contient une seule devise ou aucune.
- Hook du thème : le sélecteur est rendu uniquement via
displayNav2. Certains thèmes personnalisés suppriment ou déplacent ce hook. - CSS du bloc natif : le module masque
#_desktop_ps_currencyselector. Si vous cherchez seulement l’ancien bloc, il est volontairement masqué pendant que ce module est actif.
Si le sélecteur n’apparaît toujours pas après activation de plusieurs devises, inspectez la source de page pour mprcurrency-dropdown. Si ce markup manque, le hook ne se rend pas ou le module est sorti tôt. Si le markup existe mais que vous ne le voyez pas, le problème vient du CSS du thème ou de la mise en page header plutôt que de la disponibilité des devises.
Le module charge son propre CSS et JavaScript sur le front-office. Le JavaScript ouvre et ferme seulement le dropdown ; il ne crée pas le markup du sélecteur. Un sélecteur manquant est donc presque toujours dû au mode catalogue, à une configuration mono-devise, à un hook displayNav2 absent, ou à du styling thème qui masque le bloc rendu.
Oui, si vous l'activez. En configurant un secret d'API GA4, le module peut envoyer les achats côté serveur via le Measurement Protocol en solution de repli, de sorte qu'une commande reste enregistrée dans GA4 même lorsque la balise gtag.js du navigateur est bloquée par un bloqueur de publicités ou perdue sur une page en échec. Ce repli ne fonctionne que si vous l'activez et fournissez le secret d'API.
Pour une rétractation légale portant sur toute la commande, oui. L'article 13, paragraphe 1 exige le remboursement de tous les paiements reçus du consommateur et mentionne expressément les frais de livraison.
L'article 13, paragraphe 2 plafonne ce montant. Si le client a choisi une livraison plus chère que votre option standard la moins chère, vous ne devez que cette option standard : un surclassement en express n'est pas remboursable. Renseignez votre livraison standard la moins chère dans les réglages et le plafond s'applique automatiquement.
Deux cas diffèrent. Lorsqu'une partie seulement de la commande revient, le service de livraison a bien servi pour ce que le client garde, donc les frais ne sont pas remboursés par défaut. Lorsque le bien était défectueux, erroné ou manquant, les frais sont remboursés intégralement : il s'agit d'une mise en conformité, pas d'une rétractation.
Chaque montant est affiché avec la raison de son inclusion ou de son exclusion, avant votre validation.
Parce qu'un compte à rebours engage un humain, et qu'à 22h40 un samedi personne ne le tient. Une promesse rompue coûte plus de confiance qu'une promesse jamais faite.
Le module lit vos horaires et ne propose que ce que vous pouvez tenir : dès que possible tant que vous êtes réellement ouvert, ce matin, plus tard aujourd'hui, ou votre prochain jour d'ouverture. En dehors des heures, il annonce un rappel pendant les heures d'ouverture. La mention "généralement sous N minutes" n'apparaît que boutique ouverte.
Oui. Chaque fusion écrit un instantané chiffré de chaque ligne modifiée, et History & Undo vous propose un bouton tant que cet instantané existe, 30 jours par défaut. L'annulation refuse si elle écrasait quelque chose de modifié après la fusion, si l'identifiant d'un client absorbé a été réattribué, ou si une demande d'effacement RGPD a supprimé l'instantané. Les sessions client sont l'exception délibérée : la fusion les révoque et elles ne sont jamais restaurées, car rendre une session active ouverte serait une voie de détournement de compte.
Connectez-vous à votre compte Intercom sur app.intercom.com, ouvrez Réglages > Installation > Web et copiez l'App ID depuis le code d'installation. Collez-le dans le champ App ID du module et enregistrez. Tant qu'aucun App ID n'est renseigné, le widget reste inactif : le module ne produit jamais de script cassé ou vide sur votre boutique.
Le module parcourt votre base à la recherche de toute table portant une référence client, y compris des tables qu'il n'a jamais vues, et les liste sur l'écran Data Sources avec leur nombre de lignes et le risque d'un rattachement. Vous choisissez une stratégie par table. Rien n'est écrit dans une table sans stratégie. Une table impossible à annuler, une table avec déclencheur, une vue ou une table sans clé primaire bloque la fusion au lieu d'être traitée au mieux.
Le module prend en charge un chargement respectueux du consentement, afin que le suivi tienne compte de l'état de consentement du visiteur, et propose un identifiant utilisateur haché plutôt que le stockage d'identifiants bruts. Le comportement du consentement dépend des options activées et de la solution de consentement externe (par exemple une CMP) que vous connectez. Vous restez responsable de votre propre configuration de confidentialité et de consentement.
PrestaShop 1.6.x à 9.x, sur PHP 7.1 et supérieur. La version 1.0.0 a été installée et testée sur PrestaShop 1.6.1.24 avec PHP 7.1, 1.7.8.11, 8.2.1 et 9.2.0.
Le module choisit les hooks adaptés à la version qu'il trouve : les noms de 1.6 sur 1.6, les modernes à partir de 1.7, et il n'enregistre jamais deux hooks qui afficheraient le bouton deux fois sur la même page.
Oui. Lorsque « Transmettre les données utilisateur » est activé, le module envoie l'e-mail et le nom du client connecté à intercomSettings, si bien que les conversations arrivent déjà identifiées dans votre boîte Intercom. Les invités voient toujours le Messenger, mais de façon anonyme : aucune donnée personnelle n'est envoyée pour les visiteurs non connectés.
Oui. Le module tient ses propres enregistrements de retour et ne lit ni n'écrit jamais les tables de retours de PrestaShop : il fonctionne que cette fonction native soit active ou non.
Si vous laissez les retours natifs activés, rien n'entre en conflit : les deux coexistent et le module n'interfère pas avec le flux natif. La plupart des boutiques désactivent le natif, car le panneau client du module remplace le formulaire natif minimal et ajoute l'échéance dont ce formulaire n'a aucune notion.
Non. Il utilise les devises déjà configurées dans PrestaShop et construit des liens de changement avec SubmitCurrency=1&id_currency=.... Il ne crée pas de devises, ne modifie pas les taux de change et ne calcule pas les conversions. La disponibilité des devises, les taux et le comportement des prix restent gérés par la configuration devise de PrestaShop.
Le module lit les devises actives de PrestaShop, trouve la devise courante depuis le contexte client, et rend un lien pour chaque devise disponible. Cliquer un lien demande à PrestaShop de changer la devise sélectionnée du visiteur ; ensuite, PrestaShop gère conversion des prix, arrondis, affichage de taxe et formatage exactement comme d’habitude.
Utilisez les réglages de devise propres à PrestaShop pour les changements opérationnels : ajouter ou désactiver des devises, mettre à jour les taux de change, configurer la localisation et décider comment les prix doivent s’afficher. Utilisez ce module pour la présentation front-office du sélecteur : toggle symbole seul, code ISO optionnel dans le toggle, noms optionnels dans le dropdown, styling sensible au thème et empreinte compacte dans le header.
Une façon utile de le penser : PrestaShop possède la logique d’argent ; le module possède l’UI du dropdown. Si une devise manque dans le sélecteur, corrigez d’abord son état active/available dans PrestaShop. Si les valeurs de conversion sont fausses, mettez à jour les taux de change dans PrestaShop plutôt que dans ce module.
Le texte de consentement exact affiché au visiteur est conservé avec chaque demande, avec une empreinte à clé et un horodatage : vous montrez ce qui a été accepté, pas ce que la page affiche aujourd'hui.
Le module RGPD officiel peut exporter et effacer les demandes d'un client enregistré. Un invité ne laisse qu'un numéro, que ce module ne sait pas rattacher : la page de réglages propose donc une recherche qui exporte ou efface par numéro, avec la même validation que le formulaire. Les demandes sont aussi supprimées automatiquement après 30 ou 90 jours, et les adresses IP ne sont jamais conservées, seulement une empreinte à clé pour la limitation.
Oui. Vous choisissez si le Messenger s'affiche sur toutes les pages ou seulement certaines, activez ou non son affichage sur mobile, et définissez un délai en secondes pour que le widget se charge un peu après la page. Vous gardez ainsi une boutique rapide et n'affichez le chat que là où il aide réellement les clients.
Il note chaque paire sur des indices indépendants : même adresse e-mail, alias où les points Gmail ou un suffixe plus masquent la même boîte, même numéro de téléphone normalisé au format international, correspondance approchée du nom et de l'adresse postale dans le même code postal, même société ou même numéro de TVA, et commande invité correspondant à un compte enregistré. Les indices de même nature ne se cumulent pas, et les éléments contradictoires, numéros de TVA ou pays différents, retranchent des points. Vous pouvez modifier chaque pondération.
Non, et le supposer est une erreur fréquente et coûteuse. L'article 16, point m) n'exclut les contenus numériques sans support matériel que si trois conditions sont réunies : l'exécution a commencé, le consommateur a donné son accord exprès préalable, et il a reconnu qu'il perdait ainsi son droit de rétractation.
PrestaShop n'enregistre aucune de ces trois conditions. Le module considère donc qu'un produit virtuel conserve le droit de rétractation, jusqu'à ce que vous confirmiez dans les réglages que votre tunnel recueille réellement cet accord et cette reconnaissance.
Il se trompe volontairement du bon côté. Accorder un retour à tort coûte un remboursement ; le refuser à tort enfreint la directive.
Les biens confectionnés selon les spécifications du client sont un autre cas. L'article 16, point c) dépend du bien lui-même et non d'un accord : un produit personnalisable est donc exclu d'emblée.
Oui. Le module intègre une exclusion du trafic par employé et par adresse IP, de sorte que les visites des membres du personnel connectés ou des adresses IP que vous indiquez ne sont pas envoyées à GA4. Vos tests internes et l'activité du back-office restent ainsi en dehors de vos rapports d'analyse.
Oui. Le texte de la slide, titre, sous-titre et libellé du bouton, est stocké par langue, de sorte que chaque langue active de votre boutique peut afficher sa propre formulation tout en partageant la même mise en page et les mêmes images. Vous gérez les traductions directement dans l'administration du module.
Quatre mécanismes, tous côté serveur. Un pot de miel qu'un humain ne voit jamais. Un contrôle du délai qui rejette un envoi impossiblement rapide après le chargement. Une limitation par visiteur. Et la fusion des doublons : cliquer cinq fois produit un contact avec un compteur, pas cinq lignes.
Les numéros sont validés selon les règles internationales avant enregistrement, les absurdités n'atteignent donc jamais la file. Le module ne prétend volontairement pas vérifier qu'un numéro est joignable : rien ne le peut sans appeler.
Non. Banner Revolution se contente d'afficher les bannières, textes et liens d'appel à l'action que vous configurez. Il ne collecte aucune donnée personnelle des visiteurs et ne dépose aucun cookie de suivi ; il n'a donc pas d'incidence RGPD propre au-delà des pages vers lesquelles vous créez des liens.
Un panneau de diagnostic dans le back-office valide l'identifiant de mesure GA4 avant le démarrage du suivi et contrôle la remise des événements, avec gestion des nouvelles tentatives pour le Measurement Protocol. Un journal d'événements enregistre les événements construits et envoyés par le module, ce qui vous permet de confirmer l'arrivée des données dans GA4 avant de vous fier aux rapports.
Uniquement si vous l'activez, et il est livré désactivé. Une fois activé, il n'agit que sur les groupes au-dessus de votre seuil de certitude comportant au moins le nombre configuré d'indices indépendants, et il refuse tout groupe touchant une table inconnue, un déclencheur, une table non transactionnelle, ou présentant un conflit non résolu. Le préréglage le plus sûr le limite à replier une commande invité dans le compte enregistré qui possède déjà l'identité.
Vous pouvez l'activer, mais dans une boutique de l'Union européenne vous ne devriez pas. L'article 9, paragraphe 1 donne au consommateur le droit de se rétracter sans avoir à motiver sa décision : un champ obligatoire n'est donc pas conforme.
Le réglage est par conséquent désactivé par défaut, la liste des motifs est proposée de façon facultative, et le formulaire indique clairement au client qu'aucun motif n'est nécessaire. Les motifs que les clients donnent d'eux-mêmes sont tout de même enregistrés et affichés dans le back-office, et c'est là que se trouve généralement l'information utile.
Le module prend en charge PrestaShop 1.6 à 9.x, y compris 8.x, et fonctionne avec PHP 7.2 et plus récent. Toute la configuration se fait dans le back-office, sans avoir à modifier les templates de votre thème.
Oui. Les commutateurs d'emplacement couvrent le bouton flottant, la fiche produit, l'en-tête et un hook de thème personnalisé. Au-delà, vous pouvez n'afficher le widget que sur des produits, catégories et pages choisis, ou partout sauf sur eux, avec le même sélecteur que nos autres modules.
Si votre thème est particulier, activez le hook personnalisé et placez {hook h='displayMprCallback'} exactement où vous le souhaitez. Le module ne s'injecte jamais en cherchant des sélecteurs CSS.
Oui. Les comptes ne sont fusionnés qu'à l'intérieur d'un même domaine d'isolation client : la même boutique, ou le même groupe de boutiques lorsque le partage des clients est activé. Deux boutiques qui ne partagent pas leurs clients détiennent deux personnes distinctes du point de vue du consentement et de la loi ; ces correspondances sont donc affichées pour information et ne peuvent pas être fusionnées.
L'e-mail d'une nouvelle demande part immédiatement et ne dépend pas de cron. La relance de retard et la purge de conservation sont des tâches planifiées.
Si votre hébergeur n'a pas de cron, elles s'exécutent à l'occasion des requêtes normales : cela fonctionne, mais au mieux approximativement, et une boutique sans trafic ne les exécutera pas. Pour une planification fiable, pointez le cron de votre hébergeur sur l'URL indiquée dans l'écran des tâches planifiées. Le module signale dans le back-office lorsqu'il n'a rien exécuté récemment.
Chaque fusion, annulation et échec est ajouté à un journal d'audit chaîné par hachage : chaque entrée porte le hachage de la précédente, si bien qu'une entrée supprimée ou modifiée rompt la chaîne de façon visible. Le journal consigne ce qui s'est passé, quand, et quel employé l'a fait, ainsi que le nombre de lignes par table. Il ne contient aucune donnée client et s'exporte en CSV.
Non. Le bouton LINE flottant est ajouté via les hooks PrestaShop displayBeforeBodyClosingTag et displayHeader, vos fichiers de thème et de template ne sont donc jamais modifiés ni écrasés. La désinstallation retire le bouton proprement, sans rien laisser dans votre thème.
Non. Il ne modifie aucun template et ne surcharge aucun fichier du thème. Il agit via les hooks de presenter de PrestaShop, actionPresentProduct et actionPresentProductListing ajoutent les données loading et decoding aux tableaux d'images que votre thème affiche déjà, et via le hook filterHtmlContent pour les textes WYSIWYG. Votre thème garde le contrôle total du balisage ; le module ne fournit que les attributs. À la désinstallation, les attributs cessent simplement d'être ajoutés et rien n'est laissé modifié dans votre thème.
Le widget ouvre votre lien de contact LINE (https://line.me/ti/p/votre-LINE-ID) dans un nouvel onglet pour que le visiteur puisse démarrer une conversation dans l'application LINE. Il n'ajoute aucun message pré-rempli ou enregistré à ce lien : il transmet simplement le client à LINE.
Oui. Le module n'analyse ni ne réécrit le HTML final rendu d'une page. Il enrichit les données d'image au niveau du presenter avant l'exécution du template et ne traite que certains champs de contenu WYSIWYG. Comme il ne touche jamais à la sortie de la page, il peut fonctionner en toute sécurité avec le cache pleine page, le CCC et les CDN. Il n'y a aucun tampon de sortie à invalider, et les pages en cache restent valides.
Oui. Pour les images dans le contenu WYSIWYG, ajoutez la classe CSS d'exclusion (par défaut no-autolazy) à la balise img et le module l'ignore. C'est la méthode recommandée pour que votre image principale au-dessus de la ligne de flottaison se charge immédiatement, car mettre en lazy loading la plus grande image visible peut dégrader le Largest Contentful Paint. Les images data-URI intégrées et celles possédant déjà un attribut loading sont aussi ignorées automatiquement.
Oui. Le ciblage des pages permet d'afficher le bouton sur toutes les pages ou de le limiter à certaines, et une option mobile distincte permet de le masquer sur les téléphones. Un délai de chargement peut aussi retarder brièvement le bouton pour qu'il ne concurrence pas la page pendant son chargement.
C'est un indice pour le navigateur qui permet de décoder une image hors du thread principal, de sorte que le décodage d'une grande image risque moins de bloquer le défilement ou l'interaction. Il complète loading="lazy". Le module l'ajoute par défaut mais propose un unique interrupteur pour le désactiver si vous préférez, ne laissant que loading="lazy". Les attributs decoding existants ne sont jamais écrasés.
Les images produit sur la page produit, les images produit dans les listes de catégorie et de recherche, et les images intégrées au contenu WYSIWYG comme les descriptions de produit, de catégorie, de page CMS et de fabricant. Les deux premières sont gérées par les hooks de presenter produit ; la dernière par le hook de filtre de contenu. C'est une aide ciblée à la performance, elle ne compresse, ne redimensionne ni ne convertit aucune image, elle ajoute uniquement les attributs loading et decoding.
Le toggle fermé du header affiche toujours le symbole ou signe de la devise courante, comme $, €, £ ou le code ISO en fallback. Si Show ISO label in toggle est activé, le toggle affiche aussi le code ISO courant à côté du symbole. Le dropdown ouvert liste toujours chaque devise avec son symbole/signe, et si Show currency names in dropdown est activé, il affiche aussi le nom complet de la devise à côté de chaque symbole.
Le toggle ne rend pas de tooltip au survol. Les noms de devise sont utilisés dans les lignes du dropdown, y compris l'attribut title du lien pour chaque option de devise.
Oui. Le module enregistre son propre sélecteur dans le hook displayNav2 et charge une feuille de style qui masque le sélecteur de devise desktop natif de PrestaShop avec #_desktop_ps_currencyselector { display: none !important; }. Le client voit le dropdown compact à symbole du module à la place du bloc devise par défaut.
Activez le module, collez votre ActiveCampaign Account ID, puis enregistrez la configuration. L’Account ID est la valeur numérique affichée par ActiveCampaign dans Settings > Tracking > Site Tracking ; elle est stockée comme ACCOUNT_ID, et le module ne rendra pas le script front-office tant que ENABLED et ACCOUNT_ID ne sont pas tous deux présents.
- Dans PrestaShop, ouvrez la configuration du module ActiveCampaign.
- Activez Enable ActiveCampaign.
- Collez l’Account ID numérique, par exemple
123456789. - Visitez une page front-office et confirmez que la source de page contient le script diffuser ActiveCampaign.
Quand il est actif, le hook displayBeforeBodyClosingTag charge le script diffuser d’ActiveCampaign, exécute vgo('setAccount', ...), active le tracking par défaut et appelle vgo('process'). Pour les clients connectés, il peut aussi transmettre l’email du client avec vgo('setEmail', ...).
Le script est inséré juste avant la balise de fermeture body, pas dans le head. C’est utile pour vérifier l’installation : cherchez dans la source de page rendue près du bas diffuser-cdn.app-us1.com/diffuser/diffuser.js, vgo('setAccount' et votre account ID. S’ils manquent, soit le module est désactivé, soit l’Account ID est vide, soit le thème n’exécute pas le hook displayBeforeBodyClosingTag.
La configuration possède aussi un champ optionnel EVENT_KEY, mais le hook front-office actuel est uniquement du site tracking. Il n’envoie pas d’appels personnalisés d’event tracking ActiveCampaign depuis ce chemin de code du module. Utilisez-le pour ajouter le snippet officiel de site tracking et identifier les clients connectés par email ; construisez l’automatisation d’événements personnalisés séparément si vous avez besoin d’un tracking ActiveCampaign plus profond.
Côté confidentialité, rappelez-vous que c’est un script de tracking. Associez-le à votre configuration de consentement si votre boutique exige un consentement marketing ou analytics avant de charger du tracking tiers, car ce module lui-même n’implémente pas de porte de consentement cookie.
Oui, les clients PrestaShop connectés sont identifiés par email dans le script de tracking ActiveCampaign. Le module lit le client courant depuis le contexte PrestaShop et envoie l’email uniquement lorsque le client est connecté ; les visiteurs anonymes sont suivis sans valeur email.
Le contrôle se produit dans le hook de fermeture body du front-office. Le tracking est rendu seulement lorsque le module est activé et qu’un ActiveCampaign Account ID est présent. Le hook assigne ensuite trois valeurs au template : l’account ID, l’email client, et un booléen indiquant si un email a été trouvé.
Dans le template, vgo('setEmail', ...) est entouré d’un contrôle logged-in, donc les invités ne reçoivent pas d’appel email vide. Chaque page suivie définit quand même l’account, active le page tracking par défaut et appelle vgo('process'). Cela permet à ActiveCampaign de relier les visites de pages connues à l’email du client connecté, tandis que les visites invité restent anonymes jusqu’à ce qu’ActiveCampaign puisse les identifier par une autre voie.
Logged in customer -> setAccount + setTrackByDefault + setEmail + process
Guest visitor -> setAccount + setTrackByDefault + processLe réglage requis est l’ActiveCampaign Account ID, et le module doit être activé. Le code vérifie les deux avant de rendre le script front-office PrestaShop ; le champ Event Key est enregistré en configuration, mais le template de tracking actuel ne l’utilise pas.
À l’installation, ENABLED vaut par défaut 0, ACCOUNT_ID vaut par défaut une chaîne vide et EVENT_KEY vaut aussi par défaut une chaîne vide. L’avis de configuration requise ne déclare que ACCOUNT_ID comme requis, et le contrôle d’activation est simplement enabled plus un account ID non vide.
L’option admin décrit l’Account ID comme l’ID numérique du site tracking ActiveCampaign, mais cette source n’applique pas de validateur numérique avant rendu. Pour une configuration propre, copiez l’account ID exactement depuis les paramètres site tracking d’ActiveCampaign, activez le module, puis vérifiez la source de page pour le script diffuser.js et vgo('setAccount', ...).
ENABLED = 1
ACCOUNT_ID = 123456789
EVENT_KEY = optional, stored but not rendered by tracking.tplLes modules PrestaShop ont chacun besoin de tâches planifiées (feeds, nettoyages, synchronisations), mais câbler une ligne cron serveur séparée pour chacun est fragile. Un gestionnaire cron vous donne un endpoint unique protégé par token qui les exécute toutes. Avec Cron Manager, PrestaShop expose une URL comme /module/mprcron/cron?token=… (plus un point d’entrée cron.php pour les appels CLI ou HTTP avec options max-task et contexte) qui exécute chaque tâche enregistrée tour à tour. Pointez un seul cron serveur, ou un service externe comme cron-job.org, vers cette URL à l’intervalle choisi, et gérez les plannings individuels, l’état activé/désactivé et l’historique d’exécution depuis le back-office au lieu de modifier crontab. Gardez le token secret afin que des tiers ne puissent pas le déclencher, et commencez avec un intervalle de 5 à 15 minutes selon la sensibilité temporelle de vos tâches. La journalisation centralisée rend aussi une tâche échouée facile à repérer.
La commande CLI générée est une commande crontab sur une ligne utilisant le token partagé, par exemple * * * * * php /path/to/modules/mprcron/cron.php --token=TOKEN --max-seconds=300. Le point d’entrée exige un token, borne max_tasks entre 1 et 100, borne max_seconds entre 10 et 300, et utilise par défaut 20 tâches et 300 secondes. Le token partagé est généré comme une valeur hexadécimale de 64 caractères et validé avec hash_equals.
En interne, le package partagé possède deux tables : mpr_cron_task pour les tâches enregistrées et mpr_cron_log pour l’historique d’exécution. Chaque tâche stocke module, clé de tâche, libellé, callable ou payload, type d’exécuteur, planning, état activé, prochaine exécution, contexte, priorité et timeout. Le runner revendique une tâche avant de l’exécuter, enregistre les états completed, failed, skipped, timeout ou crashed, et écrit une ligne de log. En mode CLI, lorsque le cron.php local prend en charge les tâches isolées et que proc_open est disponible, chaque tâche peut s’exécuter dans un sous-processus afin qu’une tâche fatale n’arrête pas le reste du lot.
Non, ce module n’envoie pas d’événements ecommerce ActiveCampaign produit, panier, commande ou personnalisés. Son code PrestaShop charge seulement le site tracking, définit l’account, identifie optionnellement l’email d’un client connecté et appelle la fonction de traitement de page ActiveCampaign.
Le réglage enregistré EVENT_KEY est décrit comme optionnel pour les événements personnalisés, mais le template front-office ne le référence jamais. Il n’y a aucun appel d’événement purchase, cart, product ou checkout dans le template de tracking ; les seuls appels ActiveCampaign sont setAccount, setTrackByDefault, setEmail optionnel et process.
Pour les marchands, le résultat pratique est un suivi des visites de pages plutôt qu’un suivi ecommerce. Vous pouvez l’utiliser pour permettre à ActiveCampaign de voir les pages vues suivies et d’identifier les clients connectés par email, mais la valeur de commande, les IDs produit, le contenu du panier et les lignes d’article ne sont pas envoyés par ce module. Si vous en avez besoin, il faut une autre intégration ou du nouveau code qui se branche réellement sur les événements produit, panier et commande.
Une bonne section FAQ répond aux questions acheteurs avant qu’ils envoient un email et capte du trafic de recherche longue traîne. Pour en ajouter une à PrestaShop, utilisez FAQ Manager : il crée un hub FAQ public avec routes de catégorie, tag, recherche et question, affiche un onglet FAQ produit via displayProductExtraContent, et peut afficher du contenu FAQ en contexte catégorie comme bloc de colonne gauche/sidebar via displayLeftColumn. Vous stockez les questions, catégories, tags et assignations produit ou catégorie, donc la même réponse peut apparaître sur le hub et sur chaque produit concerné. Les clients peuvent soumettre leurs propres questions pour modération, et les réponses communautaires approuvées avec votes utiles ajoutent du contenu frais. Pour le SEO, donnez à chaque question indexable un titre et une méta-description uniques, gardez des réponses réellement utiles plutôt que des phrases d’une ligne, et utilisez le schema FAQ uniquement lorsqu’il est exact et encore utile pour votre cible de recherche/affichage.
En configuration pratique, commencez dans le menu admin FAQ : créez des catégories FAQ, puis ajoutez des questions avec texte de question multilingue, HTML de réponse, URL simplifiée, méta titre et méta description. Si l’URL simplifiée est laissée vide, les catégories génèrent un slug depuis le nom de catégorie et les questions génèrent un slug depuis le texte de question. Une question publique est visible uniquement lorsqu’elle est active, que sa date de publication est vide ou déjà passée, et que le groupe client courant est autorisé. Vous pouvez aussi définir une Answer Reveal Date, qui permet à la question d’exister avant que la réponse soit affichée.
- Utilisez Categories pour les hubs FAQ publics et pour associer des catégories FAQ aux catégories PrestaShop lorsque des blocs contextuels sur page catégorie sont utiles.
- Utilisez Questions pour les vraies entrées FAQ ; assignez directement des produits lorsqu’une question doit apparaître dans un onglet FAQ produit.
- Utilisez Tags pour améliorer la recherche FAQ, les pages de tags et la découverte interne.
- Utilisez Pending Questions et Additional Replies pour modérer les soumissions de visiteurs avant qu’elles deviennent publiques.
Pour les pages produit, ne vous appuyez pas sur de larges mappings de catégories lorsque vous avez besoin d’une FAQ produit exacte. L’onglet produit charge les questions depuis la table d’assignation directe produit-question et ne retourne rien si aucune question n’est assignée à ce produit. Les questions assignées à exactement un produit peuvent rendre une réponse dans le HTML initial de la page produit ; les questions partagées entre plusieurs produits sont traitées comme liées/partagées et leurs réponses sont chargées paresseusement à l’ouverture. Cela évite d’injecter de grands articles de dépannage dans chaque page produit et aide à éviter le contenu dupliqué bruyant.
Les pages catégorie ne sont pas rendues comme un onglet par ce module. L’intégration catégorie est un bloc de colonne gauche/sidebar qui charge un ensemble limité de questions pour la catégorie courante et les relie à l’expérience FAQ.
Les contrôles SEO sont volontairement granulaires. L’indexation du hub FAQ est activée par défaut, mais les pages catégorie, pages tag et pages question individuelles ne sont pas indexées sauf si l’interrupteur global correspondant est activé et, pour les catégories ou questions, si l’entité elle-même est marquée indexable. Les pages de recherche sont toujours noindex. Les champs méta titre et méta description se rabattent sur le titre visible, la description de catégorie ou l’extrait de réponse lorsqu’ils sont laissés vides, et les URL canoniques sont construites depuis le slug FAQ localisé, le slug de catégorie et le slug de question.
Le schema est un interrupteur, pas une magie automatique. Le réglage est SCHEMA_ENABLED et vaut par défaut 0 ; l’indication admin dit que Google a déprécié les rich results FAQ en mai 2026, donc traitez-le comme des données structurées optionnelles plutôt que comme un déclencheur garanti de rich results. La gestion des réponses planifiées n’est pas cohérente dans chaque chemin schema du code actuel : les builders JSON-LD front question et catégorie vérifient answer_visible, mais la sortie QAPage de niveau module dans l’en-tête lit directement questionData['answer'], et le chemin requête/build du schema du hub FAQ ne vérifie pas date_response ni answer_visible. Si vous utilisez des réponses différées, gardez le schema désactivé ou corrigez ces chemins avant de compter sur le schema pour masquer du contenu de réponse futur.
Le flux de soumission visiteur est modéré. Ask a Question est activé par défaut, valide le nom, l’email et le texte de question, plafonne le texte de question à 5000 caractères, utilise un champ honeypot, et stocke l’élément dans mprfaq_pending avec statut pending. La limite par défaut est ASK_MAX_PENDING=2 questions en attente par email et par catégorie produit de premier niveau ; définissez-la à 0 uniquement si vous voulez volontairement aucune limite de questions en attente. Si le visiteur pose une question depuis une page produit et qu’aucune catégorie FAQ n’est fournie, le contrôleur résout une catégorie depuis le contexte produit.
Les réponses publiques sont séparées de la réponse officielle. CA_ENABLED vaut par défaut 0 ; lorsqu’il est activé, le module peut exiger une connexion, valide les détails auteur, plafonne le texte de réponse à 5000 caractères, et enregistre la réponse comme pending. Les réponses additionnelles approuvées peuvent apparaître comme réponses communautaires et recevoir des votes. Les votes utiles sont limités à un vote par IP par question ou réponse, avec un cookie PrestaShop utilisé uniquement pour mémoriser l’état UI du visiteur.
FAQ_SLUG=faq
FAQ_HUB_INDEXABLE=1
FAQ_CATEGORY_INDEXABLE=0
FAQ_TAG_INDEXABLE=0
QUESTION_INDEXABLE=0
SCHEMA_ENABLED=0
ASK_ENABLED=1
ASK_MAX_PENDING=2
CA_ENABLED=0Pour une FAQ SEO, la règle pratique est de garder le hub large, de rendre indexables seulement les fortes pages catégorie ou question autonomes, d’assigner directement les questions produit, et de laisser les petites réponses spécifiques au produit dans l’onglet produit. Cela donne aux clients les réponses au bon endroit tout en gardant l’index concentré sur les pages capables de vivre seules.
Le module gère des fiches catalogue digitales pour modules, thèmes et addons. Dans PrestaShop, chaque produit digital peut stocker nom technique, branche, version actuelle, champs de compatibilité, URLs documentation, démo et dépôt, changelog, mois de support et limites de domaines.
Oui, MPR FAQ peut collecter les questions clients pour validation. Dans PrestaShop, les questions en attente stockent le nom, l’e-mail, la question, le produit ou la catégorie FAQ, le statut, une réponse admin optionnelle et les dates avant publication.
Utilisez l'espace de nettoyage pour supprimer les anciens enregistrements pris en charge dans PrestaShop. Le module compte et supprime paniers abandonnés de plus de 30 jours sans commande, anciennes recherches, prix spécifiques expirés, logs, connexions, invités orphelins et mails.
Si vous avez seulement besoin d’un avis cookie clair accepter-ou-refuser, une bannière légère est l’implémentation la plus simple. Lightweight Cookie Banner rend la bannière depuis des hooks de niveau footer, stocke le choix du visiteur dans un cookie de consentement, et vous permet de configurer le texte de bannière, les boutons, couleurs, position, lien vers la politique de confidentialité et la durée du consentement avant de redemander (365 jours par défaut). Elle est volontairement minimale - sans scripts lourds - donc elle ne ralentira pas votre boutique. Utilisez-la lorsque votre empreinte de tracking est faible et que vous devez surtout informer les visiteurs et enregistrer leur choix. Si vous devez aussi bloquer les scripts jusqu’au consentement, loguer les consentements ou offrir des préférences granulaires par catégorie, une plateforme de consentement complète est plus adaptée. Associez toujours la bannière à une politique cookies et confidentialité exacte et à jour.
Le module est activé par défaut, position en bas à gauche, boutons côte à côte, thème sombre, COOKIE_EXPIRY de 365 jours, Google Consent Mode activé et DEFAULT_CONSENT défini à denied. Il peut s’afficher comme barre pleine largeur en haut ou en bas, bannière d’angle, bannière flottante en bas, ou modale centrée avec overlay. Le choix du visiteur est stocké dans le cookie first-party mprcookie_consent avec granted ou denied ; le JavaScript l’écrit avec path=/, SameSite=Lax, et Secure lorsque la boutique est en HTTPS.
Lorsque Google Consent Mode est activé, le hook d’en-tête injecte le signal de consentement par défaut et charge les assets/config head-safe ; il ne rend pas le balisage visible de la bannière. Le balisage de bannière est rendu depuis displayFooterAfter ou displayFooter, avec un garde pour ne sortir qu’une fois, et le script front envoie une mise à jour de consentement après acceptation ou refus du visiteur. Le module ne catégorise pas les cookies, ne réécrit pas les scripts tiers, et ne conserve pas de table de logs de consentement. Il avertit aussi lorsque Cookies Revolution est disponible, car un seul module de consentement cookie doit contrôler le front-office à la fois.
Le Meta (Facebook) Pixel suit les actions des acheteurs afin que vous puissiez mesurer les performances publicitaires et construire des audiences de retargeting. PrestaShop n’a pas de Pixel natif, donc vous l’ajoutez avec un module de tracking. Avec Facebook Pixel, saisissez votre Pixel ID et activez le suivi navigateur ; le module déclenche ensuite les événements ecommerce standards, PageView, ViewContent, AddToCart, InitiateCheckout, Search, AddToWishlist, CompleteRegistration et Purchase, avec des interrupteurs individuels pour activer ou désactiver certains événements. Pour des conversions précises malgré les pertes liées aux navigateurs et ad blockers, activez aussi la Conversions API côté serveur, qui envoie les événements Purchase à Meta avec un event ID correspondant afin que les hits navigateur et serveur soient dédupliqués. Vérifiez tout dans l’outil de test Events Manager de Meta avant de lancer vos campagnes, et assurez-vous que le déclenchement du Pixel respecte votre bannière de consentement cookie afin que le tracking ne s’exécute qu’après consentement marketing.
Le module s’installe avec ENABLED désactivé et un PIXEL_ID vide, donc aucun suivi navigateur ne démarre tant que vous ne l’avez pas configuré. Les Pixel IDs sont validés comme chiffres uniquement. La plupart des interrupteurs d’événements standards sont activés par défaut une fois le module lui-même activé, tandis que CAPI_ENABLED est désactivé par défaut et exige un Pixel ID plus CAPI_ACCESS_TOKEN. La version Graph API par défaut dans le module est v25.0, et un code d’événement de test optionnel peut être envoyé pendant la validation dans Meta Events Manager.
Le consentement est vérifié avant le rendu du template de tracking. Si Cookies Revolution est actif, le module lit la valeur marketing depuis mprcr_consent ; si Lightweight Cookie Banner est actif, il lit mprcookie_consent ; si aucun n’est actif et que le respect du consentement est activé, le module traite le consentement marketing comme disponible. La navigation des employés peut aussi être exclue. AddToCart est suivi via l’événement PrestaShop updateCart lorsqu’il est disponible, avec des replis de clic pour les anciens thèmes. Purchase est émis sur la confirmation de commande avec un event id déterministe de commande, et lorsque CAPI est configurée, le même achat est mis en file et traité via la file de conversion partagée, avec une tâche cron planifiée toutes les 300 secondes pour réessai/traitement.
Les acheteurs convertissent mieux lorsqu’ils peuvent voir quand une commande arrivera. Pour afficher une date de livraison estimée dans PrestaShop, utilisez Estimated Delivery Date : il ajoute vos jours de préparation configurés à la date courante et affiche le résultat sur la page produit via le bloc displayProductAdditionalInfo. Vous pouvez définir une heure limite quotidienne (les commandes passées après cette heure comptent à partir du lendemain), exclure les week-ends afin que samedis et dimanches ne soient pas comptés et qu’un résultat final tombant le week-end soit repoussé au lundi, et choisir le format de date affiché aux acheteurs. Le message apparaît automatiquement sur les pages produit éligibles, donnant une attente concrète de type « arrive avant » plutôt qu’un vague « expédié bientôt ». Gardez un délai de préparation réaliste et alignez l’heure limite sur votre vrai planning d’expédition, afin que la date promise corresponde à ce que les clients reçoivent. Des estimations exactes réduisent les tickets « où est ma commande ».
Les valeurs d’installation par défaut sont ENABLED=1, PROCESSING_DAYS=1, CUTOFF_HOUR=14, EXCLUDE_WEEKENDS=1 et DATE_FORMAT=l, F j. Le calcul utilise le DateTime courant du serveur, lit l’heure actuelle comme valeur entière sur 24 heures, et ajoute un jour de préparation supplémentaire lorsque l’heure actuelle est supérieure ou égale à l’heure limite. Il avance ensuite un jour à la fois jusqu’à ce que le nombre de jours de préparation configuré soit compté, en sautant samedi et dimanche lorsque l’exclusion des week-ends est activée.
Le message front-office reçoit aussi hours_left, qui est simplement la différence en heures entières jusqu’à l’heure limite lorsque la commande est encore avant cette heure. Ce module n’inspecte pas les plages de livraison transporteur, le statut de stock, les calendriers d’entrepôt, les jours fériés, le code postal de destination ou les délais spécifiques par produit. C’est une promesse simple de page produit basée sur des règles de préparation globales à la boutique, donc elle fonctionne mieux lorsque votre catalogue partage le même modèle d’expédition.
Avec le temps, une base de données PrestaShop se remplit de données dont vous n’avez plus besoin : paniers abandonnés, lignes de panier orphelines, prix spécifiques et règles panier expirés, anciens enregistrements de connexions et invités, statistiques de recherche, logs mail et 404, vues de pages et fils clients fermés. Sans contrôle, ces tables ralentissent les requêtes et gonflent les sauvegardes. Pour les nettoyer en sécurité, utilisez Cleanup Revolution : il regroupe chaque nettoyage en tâches nommées, compte les lignes affectées avant suppression, prend en charge les aperçus dry-run par défaut, et enregistre les vraies exécutions de suppression dans l’historique de nettoyage. Commencez par les paniers abandonnés de plus de 30 jours et les anciennes statistiques de recherche/connexion, vérifiez les nombres de l’aperçu, puis supprimez par lots. Faites toujours une sauvegarde de base de données d’abord. Pour une maintenance continue, planifiez les tâches au lieu de les lancer à la main ; consultez notre guide performance PrestaShop.

Before any real cleanup, make a fresh database backup and run the module preview first. Do not delete rows manually with SQL; use Cleanup Revolution's dry-run counts, review the affected tasks, then run the cleanup from the module in controlled batches.
mysqldump -u db_user -p db_name > prestashop-before-cleanup.sqlLa configuration par défaut est volontairement prudente : le dry run est activé par défaut, le mode corbeille est activé, les paniers abandonnés valent par défaut 30 jours, de nombreux logs/statistiques 90 jours, les fils clients fermés 180 jours, les comptes vides 365 jours, et le moteur utilise des tailles de lot par tâche plus une limite totale de 50000. Une tâche sans ligne à retirer est ignorée par le runner groupé, et une vraie suppression de base de données se fait par lots plutôt qu’en une énorme instruction.
Un détail d’audit log compte : les exécutions dry-run retournent le nombre affecté avant que MPRCleanupLog::record() soit appelé, donc les aperçus dry-run ne sont pas écrits dans l’historique de nettoyage. Les vrais nettoyages de base de données sont logués avec dry_run = 0. Les actions manuelles du Back Office appellent DatabaseCleanupEngine::executeTask(..., $employeeID) ou DatabaseCleanupEngine::executeAll($dryRun, $employeeID) ; elles utilisent donc la valeur par défaut trigger_type = manual et enregistrent l’ID de l’employé lorsqu’il est disponible. Le nettoyage planifié de la base de données appelle MPRCleanupRevolution::cronDBCleanup(), qui transmet DatabaseCleanupEngine::executeAll(false, null, 'cron') ; ces lignes de journal enregistrent donc trigger_type = cron sans ID d’employé.
Le moteur de nettoyage de base de données inclut des tâches nommées pour paniers abandonnés, produits de panier orphelins, statistiques de recherche, prix spécifiques expirés, règles panier expirées avec quantité zéro, anciens logs, anciennes connexions, lignes de connexion orphelines, anciens invités, logs mail, logs 404, vues de pages, fils clients fermés et cache referrer. Il a aussi des nettoyages commerciaux plus risqués comme comptes invités sans commandes, adresses orphelines et anciens comptes enregistrés sans commandes ni paniers récents. Les valeurs cron par défaut répartissent le travail entre nettoyage de base de données, nettoyage de fichiers et fenêtres d’optimisation de tables, afin que vous puissiez automatiser la maintenance sans lancer toutes les opérations lourdes à la fois.
Le rendu en storefront est gère par le hook displayMprSubtitle. Le resolver peut détecter la page produit, catégorie, CMS, fabricant ou fournisseur courante, et les templates peuvent aussi transmettre un ID produit explicite si nécessaire.
Pour une conformité GDPR et ePrivacy complète, il faut plus qu’une bannière : les acheteurs doivent pouvoir accepter ou refuser les cookies par finalité. Cookies Revolution ajoute un consentement granulaire à PrestaShop avec les catégories standard, nécessaire, fonctionnel, analytics et marketing, et un panneau de préférences où les visiteurs peuvent tout accepter, refuser les catégories optionnelles ou enregistrer une sélection personnalisée ; leur choix est stocké dans un cookie de consentement. Il peut aussi bloquer les scripts de tracking correspondants jusqu’à l’obtention du consentement, en réécrivant les balises afin qu’elles ne s’exécutent que pour les catégories autorisées, et loguer les enregistrements de consentement avec des identifiants hachés pour votre piste d’audit. Le consentement préalable (pas de cases optionnelles précochées) et le retrait du consentement aussi facilement que son octroi sont des exigences légales, cela couvre les deux. Combinez-le avec Google Consent Mode v2 afin que vos tags Google s’ajustent automatiquement au choix de chaque acheteur.
À l’installation, le module crée des tables de catégories, cookies, règles de script, logs de consentement, résultats de scan et design. Les catégories initialisées sont necessary, functional, analytics et marketing ; necessary est requis et activé par défaut, tandis que les catégories optionnelles sont désactivées par défaut sauf si vous changez le mode de consentement par défaut. L’état navigateur stocké est compact, par exemple necessary:1|functional:0|analytics:0|marketing:0 dans mprcr_consent, avec un cookie séparé mprcr_version utilisé lorsque RECONSENT_ON_CHANGE est activé.
Le blocage de scripts fonctionne en deux couches. Sur la sortie serveur, le module réécrit les scripts externes correspondants en type="text/plain" avec data-cookiecategory et stocke la source originale dans data-original-src ; il peut aussi réécrire les scripts inline correspondants selon des règles de contenu de script. Côté navigateur, un MutationObserver vérifie les scripts injectés dynamiquement par rapport à la même liste de règles et les bloque si la catégorie correspondante n’est pas accordée. Lorsque le consentement est enregistré, le module met à jour Google Consent Mode, active les scripts autorisés, supprime les cookies des catégories révoquées lorsque configuré, déclenche mprcr:consent, et logue la décision via AJAX lorsque la journalisation est activée, avec un court throttle pour éviter le spam de logs en double.
Oui, vous pouvez bloquer par IP, plage CIDR, code pays ou motif user-agent, y compris avec un périmètre checkout-only. Le gestionnaire de bans PrestaShop vérifie d’abord les entrées whitelist, puis les règles de ban actives, et applique le périmètre full, checkout ou authentication selon le contexte de requête courant.
Le formulaire de ban prend en charge une IP unique, une IP wildcard comme 192.168.1.*, une plage IP comme 1.1.1.1-1.1.1.255, un CIDR comme 192.168.1.0/24, un code ISO pays et un motif user-agent. Les règles user-agent peuvent être du texte simple comparé sans tenir compte de la casse, ou une regex entourée de slashes.
Le périmètre est basé sur le contrôleur courant. Le périmètre checkout s’applique à order, orderopc, cart, supercheckout, onepagecheckout et checkout. Le périmètre login/auth s’applique à authentication, my-account, identity, registration et password. Les bans full sont vérifiés avant les bans spécifiques à un périmètre, donc un ban full bloque le visiteur partout.
- Activation :
BAN_ENABLEDest installé comme activé par défaut. - Bans temporaires : un ban peut avoir
date_expiry; les bans actifs expirés sont désactivés pendant le chargement des bans actifs. - Message : chaque ban peut avoir son propre message, sinon le module se rabat sur le message multilingue par défaut configuré.
- Multiboutique : les enregistrements de ban avec
id_shop=0s’appliquent globalement, tandis que les bans propres à une boutique ne s’appliquent que dans le contexte de boutique courant.
Checkout-only CIDR example:
ip_cidr = 203.0.113.0/24
ban_type = checkout
reason = Repeated fraudulent checkout attemptsOui, il peut créer ou synchroniser un job cron-job.org lorsqu'il est configuré. La configuration admin PrestaShop peut tester la clé API cron-job.org, vérifier l'accèssibilite externe et pointer le job distant vers l'URL cron tokenisée de statut ou d'exécution du module.
Les ventes flash, promotions saisonnières et offres limitées fonctionnent mieux lorsqu’elles démarrent et s’arrêtent automatiquement. Pour planifier des remises temporelles dans PrestaShop, utilisez Smart Dynamic & Scheduled Discounts : créez des campagnes avec dates de début et de fin, et le hook de prix vérifie la fenêtre active, le périmètre produit, l’accès par groupe client et les limites d’usage, puis applique la meilleure remise éligible au prix produit sans travail manuel. Comme la remise est calculée au moment de l’affichage et du checkout, les prix reviennent automatiquement lorsque la fenêtre se ferme, pas besoin de se souvenir d’annuler une promo. Utilisez le ciblage par groupe client pour les offres réservées aux membres, et appuyez-vous sur la logique du meilleur prix pour garder les campagnes qui se chevauchent prévisibles. Affichez toujours le prix original à côté de l’offre afin que l’économie soit visible, et vérifiez que les prix planifiés respectent vos éventuelles règles de marge minimale.
Le modèle de campagne prend en charge des types de campagnes comme scheduled, recurring, flash sale, countdown, early bird et last chance, avec les types de remise percent, amount et fixed_price. Le périmètre produit peut être une assignation directe produit/déclinaison, des catégories avec sous-catégories optionnelles, des fabricants, des groupes clients, ou aucun périmètre du tout, auquel cas une campagne active peut s’appliquer à tous les produits. Les remises personnalisées par produit peuvent remplacer la remise de campagne lorsque la ligne produit n’hérite pas de la valeur par défaut.
Les campagnes récurrentes ajoutent des lignes de planning avec fenêtres quotidiennes, hebdomadaires, mensuelles ou personnalisées, heures de début/fin et fuseau horaire. L’usage est suivi par commande/produit/client dans mprdsd_campaign_usage, et le module vérifie les limites d’usage totales, par client et par quantité de produit avant d’appliquer une remise. Le hook de prix utilise volontairement le prix courant transmis par PrestaShop au lieu d’appeler Product::getPrice(), car cela rebouclerait dans le hook de prix. Il soustrait ensuite le montant de remise éligible le plus élevé du prix calculé courant et n’écrit jamais de lignes native specific-price, ce qui explique pourquoi la remise disparaît automatiquement lorsqu’aucune campagne n’est active.
Cela dépend du téléchargement dont vous parlez :
- Un module sous licence, oui. Les téléchargements sous licence sont liés à votre boutique : le contrôleur de téléchargement vérifie la propriété de la licence, sa validité, le nombre de téléchargements restants et le fait que la boutique sélectionnée est bien affectée à la licence avant d'émettre une URL de téléchargement tokenisée. C'est cette liaison qui maintient une licence payante rattachée à sa boutique.
- La démo gratuite de 30 jours, non. Indiquer votre e-mail et votre domaine d'installation au téléchargement est facultatif. La seule chose que cela vous apporte, c'est du confort plus tard : si vous achetez avec ce même e-mail, votre boutique peut vous proposer une activation en un clic. Sinon, vous collez simplement une clé de licence.
Pour l'ensemble du parcours, de l'essai à l'activation, puis au support, voir Fonctionnement des licences, de l'activation et du support.
Oui, le module fournit un espace back-office pour les tâches planifiées. Il peut lister les tâches des modules utilisant le CronTrait partage, lancer des tests, activer ou désactiver des tâches, modifier les fréquences, supprimer des tâches personnalisées, consulter les logs et appliquer des changements en masse.
Oui, il peut bloquer les scripts correspondants jusqu'àu consentement. Lorsque le blocage est actif, le hook de sortie transforme les scripts en type text/plain avec métadonnées de catégorie, puis le JavaScript front restaure seulement les scripts dont la catégorie est autorisée.
Oui, le mode dry-run prévisualise les résultats avant suppression. Le module l'active par défaut, utilise des tailles de lots par tâche et des limites de sécurité configurables, puis journalise déclencheur, lignes affectées, statut dry-run et employé pour l'administrateur PrestaShop.
PrestaShop n’a pas de blog intégré, donc pour publier des articles, guides et contenus SEO, vous ajoutez un module de blog. Blog Revolution crée un blog complet dans votre boutique : il enregistre des routes dédiées pour l’index du blog, les articles individuels, catégories, tags, auteurs, archives mensuelles, recherche et un flux RSS, et ajoute des blocs pour la page d’accueil, les colonnes latérales, le footer, les pages produit et les listings de style catégorie afin que vos derniers articles apparaissent dans toute la boutique. Comme le blog partage votre thème, votre design et votre configuration linguistique, les articles héritent automatiquement de votre branding et de vos URL multilingues. Un blog est l’un des investissements SEO PrestaShop les plus efficaces : il cible les requêtes informationnelles que vos pages produit et catégorie ne peuvent pas couvrir, crée des liens internes vers ces pages et attire des backlinks. Planifiez d’abord une structure de catégories, puis publiez régulièrement et liez chaque article aux produits pertinents.
Dans le code, ce n’est pas simplement un wrapper de page CMS. Le module crée ses propres tables pour les articles, traductions d’articles, catégories, tags, auteurs, commentaires, liens article-produit, suivi des vues/likes, images, restrictions de groupe et redirections de slugs. Les articles ont des champs SEO comme méta titre, méta description, méta keywords et URL canonique par langue, et le module peut sortir des données Open Graph, l’autodécouverte RSS, des liens hreflang et des liens de pagination précédent/suivant depuis le hook d’en-tête.
Le préfixe d’URL par défaut est blog, donc l’ensemble de routes généré inclut des chemins comme /blog, /blog/tag/{rewrite}, /blog/author/{slug}, /blog/archive/{year}/{month}, /blog/search et /blog/rss. Les valeurs par défaut supposent aussi 12 articles par page, une grille en trois colonnes, commentaires, notes, extraits, métadonnées auteur/date/vue/commentaire, partage social, schema, hreflang, Open Graph et RSS activés. Cela vous donne une surface de publication complète, mais vous devez quand même définir des règles éditoriales : quels articles lient vers les produits, quelles catégories correspondent aux termes commerciaux, et quelles anciennes URL doivent rediriger plutôt que retourner 404.
Les balises canoniques indiquent à Google quelle version d’une page est l’originale, évitant les problèmes de contenu dupliqué liés aux filtres, à la pagination et aux produits presque identiques. PrestaShop définit automatiquement les canoniques mais ne vous donne aucun moyen de les remplacer par page. Pour définir une canonique personnalisée pour un produit, une catégorie, une page CMS, un fabricant ou un fournisseur spécifique, utilisez Product Canonical Manager : créez une règle pour l’entité cible, saisissez l’URL que vous voulez faire créditer aux moteurs de recherche, et enregistrez une valeur différente par langue de boutique si nécessaire. Utilisez-le lorsque plusieurs produits sont des variantes d’un produit maître, lorsqu’une page CMS reprend un article de blog, ou lorsqu’une URL de campagne doit se consolider vers la page produit propre. Pour comprendre comment les canoniques, URL, schema et sitemaps s’articulent, consultez notre guide SEO PrestaShop.
Le module stocke les règles dans une table dédiée mprcanonical_rule et prend en charge les types d’entités product, category, cms, manufacturer et supplier. Chaque règle a une action : override remplace une canonique existante par l’URL de l’entité, add_missing en insère une uniquement lorsque la page n’a pas déjà de canonique, et custom utilise l’URL personnalisée multilingue enregistrée sur la règle. Les règles peuvent aussi définir noindex et nofollow.
Pour les règles produit, le résolveur peut correspondre à un produit spécifique, tous les produits, des produits par catégorie, fabricant ou fournisseur, et il prend en charge les exclusions de sélecteur. Lorsque plusieurs règles correspondent, la requête trie par priority DESC, donc la règle de priorité la plus élevée gagne pour l’URL canonique tandis que les drapeaux noindex/nofollow peuvent s’accumuler. Le hook de sortie modifie le head HTML final, il peut donc remplacer les balises canonical existantes, ajouter des directives robots, ajouter des liens hreflang lorsqu’activés, et normaliser les URL générées avec suppression de paramètres configurée, conversion en minuscules et gestion optionnelle du slash final.
Oui, il peut ignorer les samedis et dimanches lorsque l’exclusion des week-ends est activée. Le calcul PrestaShop ne compte pas ces jours pendant l’ajout du délai de préparation et reporte aussi un résultat final tombant le week-end au lundi.
Oui, l'espace admin affiche les compteurs avant d'exécuter les nettoyages. Dans PrestaShop, chaque tâche possède une requête de comptage, et le template montre le total ainsi que les détails par tâche avant l'action choisie.
Oui. Les règles de sous-titres produit peuvent cibler tous les produits, des produits précis, des produits dans des catégories, des produits par fabricant et des produits par fournisseur. Des règles d'exclusion peuvent aussi retirer certains produits ou correspondances de catégorie d'une règle plus large.
Oui, les IP whitelistées sont vérifiées avant les bans et ne sont jamais bloquées par le matcher de bans. Le module PrestaShop prend en charge les entrées whitelist par IP exacte ou plage CIDR, avec un filtrage sensible à la boutique afin que les enregistrements whitelist propres à une boutique ne s’appliquent que dans le contexte pertinent.
La whitelist est basée sur l’IP, pas sur le pays ou le user-agent. Dans le formulaire admin, vous saisissez soit un champ adresse IP, soit une plage CIDR, pas les deux. Le champ adresse IP est documenté pour une IP unique ou un wildcard comme 192.168.1.* ; le champ CIDR attend une notation comme 192.168.1.0/24.
Quand une requête est vérifiée, isBanned() appelle d’abord isWhitelisted(). Si l’IP visiteur correspond à une ligne whitelist, la fonction renvoie immédiatement false et aucun ban pays, user-agent, IP exacte ou CIDR n’est appliqué. C’est utile pour les IP bureau, développeur, prestataire de paiement ou monitoring qui ne doivent pas être bloquées par des règles larges de pays ou plage.
- Stockage : les lignes whitelist stockent adresse IP, CIDR, libellé, ID employé, ID boutique et date de création.
- Gestion boutique : quand le multishop est actif, la requête whitelist charge les lignes de la boutique courante et les lignes globales
id_shop=0. - Piège : une whitelist n’aide que si le module détecte la même vraie IP visiteur que celle que vous avez stockée. Si un proxy ou CDN change l’IP vue par PrestaShop, whitelistez l’adresse que PrestaShop reçoit réellement.
Oui, il prend en charge les événements Purchase côté serveur via Meta Conversions API. Dans PrestaShop, le module met les conversions d’achat en file, les envoie à la version Graph API configurée et utilise des event IDs cohérents entre navigateur et serveur.
Oui, il prend en charge des réponses supplémentaires approuvées et les votes utiles. Dans PrestaShop, les réponses stockent type d’auteur, références client ou employé, statut, compteurs de votes et contenu, tandis que les votes question et réponse sont suivis par entité et IP.
Oui, elle prend en charge Google Consent Mode v2 lorsque l'option est activée. Le module écrit une commande de consentement par défaut avant les tags et met à jour ad_storage, ad_user_data, ad_personalization et analytics_storage après acceptation ou refus dans PrestaShop.
Le module reste installé, mais hookDisplayHeader() ne renvoie rien, car isActive() exige le Brand ID. L'avis de configuration requise informe également votre équipe que le suivi est inactif tant que le Brand ID n'a pas été renseigné.
Oui, des tâches cron personnalisées peuvent être ajoutees depuis le contrôleur de tâches. Le formulaire admin PrestaShop valide module propriétaire, planning, contexte et type d'executeur, et prend en charge URL, callable et commande, avec les commandes limitées aux contextes cron ou test admin explicite.
Le générateur vérifie le journal des références du module, la table native orders et les références order_payment. Il essaie jusqu'à 10 candidats avant d'enregistrer une erreur et d'abandonner.
Le resolver trie les correspondances actives par priorité. En mode unique, il renvoie le sous-titre prioritaire ; en mode tous, il renvoie la liste triée afin que le template puisse afficher plusieurs sous-titres.
Oui, les choix de consentement peuvent être journalisés lorsque l'option est activée. Le contrôleur AJAX PrestaShop enregistre la carte de consentement, la source et la version, tandis que le modèle de log hache les identifiants visiteur, IP et user-agent.
Vous pouvez ajouter Criteo OneTag à PrestaShop en configurant un Criteo Partner ID numérique et en activant le suivi navigateur. Le module construit ensuite les evenements OneTag dans le header pour les pages e-commerce prises en charge et reste inactif si l'ID manque ou est invalide.
Vous pouvez collecter l'IP visiteur et les informations appareil avec ce module PrestaShop lorsque la collecte est activée. Il stocke ID client ou invité, ID boutique, adresse IP, données pays, détails appareil analyses et champs optionnels user-agent, OS, navigateur et résolution d'écran.
Oui, le module contient un chemin d’auto-ban authentication pour les connexions PrestaShop échouées, mais il ne s’exécute que lorsque l’enregistreur d’échecs de connexion du module est invoqué par l’intégration d’authentification. Chaque échec enregistré stocke l’IP visiteur, l’email tenté, le user agent, l’ID boutique et l’horodatage dans mprceiipban_failed_logins.
Les deux réglages qui contrôlent le ban sont MPRCEIIPBAN_AUTOBAN_THRESHOLD et MPRCEIIPBAN_AUTOBAN_WINDOW. Les valeurs par défaut d’installation sont threshold 0 et window 60 minutes, donc l’auto-ban est désactivé tant qu’un seuil positif n’est pas configuré. Lorsque le nombre d’échecs depuis la même IP dans la fenêtre configurée atteint le seuil, le module ajoute un ban auth avec le motif Auto-banned: X failed login attempts in Y min et une expiration une heure dans le futur.
Un ban auth est plus étroit qu’un ban complet : il cible les pages liées à l’authentification, tandis que les bans full existants restent prioritaires. Comme ce checkout source contient l’enregistreur et la logique de ban mais pas de fichier d’override d’authentification concret, vérifiez que votre build installée inclut l’intégration d’authentification avant de vous y fier comme seule protection de connexion.
Le compteur de seuil est basé sur l’IP. L’email échoué est stocké pour revue, mais countRecentFailedLogins() compte seulement les lignes avec le même ip_address plus récentes que la fenêtre configurée ; il ne compte pas séparément par email tenté. Le contrôle d’auto-ban évite aussi de créer un nouveau ban auth temporaire si l’IP est déjà sous ban full.
- Pour l’activer : définissez
AUTOBAN_THRESHOLDsur un nombre positif comme5et gardez ou ajustezAUTOBAN_WINDOWen minutes. - Ce qui est créé : une ligne active dans
mprceiipban_bannedavecban_type=auth, l’IP visiteur et unedate_expiryd’une heure. - Nettoyage : les lignes d’échec de connexion sont couvertes par le chemin de purge du module, qui utilise le nombre de jours de rétention de logs configuré.
AUTOBAN_THRESHOLD = 5
AUTOBAN_WINDOW = 60
Result after 5 failures from one IP in 60 minutes: temporary auth ban for 1 hourPrestaShop est livré avec une seule page de contact fixe, ce qui ne suffit pas lorsque vous avez besoin de demandes de devis, demandes B2B, entrées support ou inscriptions à des événements. Pour construire vos propres formulaires, utilisez Better Contact Form : il stocke les formulaires et leurs champs dans des tables dédiées et les rend via un contrôleur de module ou un hook, avec une gestion fonctionnelle des valeurs soumises pour les champs texte, email, téléphone, textarea, select, checkbox, URL et nombre. Vous pouvez créer plusieurs formulaires pour différents usages, les placer sur n’importe quelle page, et collecter des soumissions structurées au lieu d’emails en texte libre. Gardez chaque formulaire court, marquez clairement les champs requis, et ajoutez une protection anti-spam. Pour le GDPR, incluez une case de consentement et un lien vers votre politique de confidentialité afin que les données de demande soient collectées légalement.
Le template a aussi une branche d’input file, mais le processeur de soumission actuel lit les valeurs de champ via Tools::getValue() et ne gère pas $_FILES. Cela signifie que les champs fichier peuvent être affichés, mais les fichiers uploadés ne sont pas persistés comme valeurs de champ soumises dans l’implémentation actuelle. Ne comptez pas sur la collecte d’uploads de fichiers tant que la gestion de fichiers n’est pas ajoutée.
Les formulaires, champs, soumissions et valeurs individuelles de soumission sont stockés dans des tables séparées, donc une demande conserve à la fois une ligne de résumé et des données de champs structurées. Le renderer peut choisir un formulaire spécifique ou le formulaire actif par défaut, ne retourne rien lorsqu’un formulaire est inactif ou n’a aucun champ, et préremplit le nom/email du client connecté lorsque disponible.
Le traitement de soumission vérifie que le bouton submit a été posté, effectue les contrôles de champs requis, validation de type, validation d’options select, méthodes optionnelles de validation PrestaShop, application de la case GDPR, détection spam et persistance en base de données. La valeur cachée _mpr_ft n’est pas un token CSRF ; c’est un horodatage base64 utilisé par le contrôle anti-spam de timing. Honeypot et contrôle de temps anti-spam sont activés par défaut, avec un temps minimum de soumission par défaut de 3 secondes. Les soumissions spam sont quand même enregistrées avec is_spam et spam_reason, mais les emails admin/client ne sont envoyés que pour les soumissions non spam. Cela vous donne une piste d’audit sans laisser le trafic bot évident déclencher des notifications.
Les avis photo permettent aux acheteurs de joindre de vraies images produit à leurs notes, ce qui renforce la confiance et ajoute du contenu unique et riche en mots-clés à vos pages produit. PrestaShop n’a pas de fonctionnalité d’avis image intégrée, vous l’ajoutez donc avec un module d’avis. Avec Product and Store Reviews, activez les uploads d’images dans les réglages d’avis : le formulaire accepte alors les fichiers JPEG, PNG et WebP, applique votre taille maximale de fichier et votre nombre maximal d’images, redimensionne automatiquement les grands uploads, génère des miniatures, et attache les images à l’enregistrement d’avis sauvegardé. Les avis photo approuvés s’affichent avec le produit et alimentent les rich results de notation étoile. Définissez une limite raisonnable - par exemple 3 à 5 images par avis - et gardez la modération activée afin que seules les photos réelles et pertinentes soient publiées. Les photos client réduisent aussi les retours en fixant des attentes précises avant l’achat.

Dans la source locale, cette fonctionnalité se trouve dans le module mprcomments. Les uploads d’image sont activés par ALLOW_IMAGES, avec des valeurs par défaut de 3 images par avis et 2 MB par image. Le template d’avis produit utilise un input fichier multiple nommé review_images[] et accepte image/jpeg, image/png et image/webp. L’uploader valide le type MIME, la taille de fichier et les dimensions d’image, puis redimensionne les grandes images à un maximum de 1200 par 1200 pixels et crée des miniatures de 150 par 150.
L’avis est d’abord enregistré avec le statut pending ou approved selon les réglages de modération, puis les uploads d’image sont traités immédiatement contre cet ID d’avis enregistré. L’approbation contrôle la visibilité publique, pas l’attachement des images. La validation normale des avis s’applique d’abord : le contenu de l’avis doit respecter la longueur minimale, la note doit être entre 1 et 5, les invités sont bloqués sauf autorisation, les doublons d’avis client sont vérifiés, et la modération peut laisser l’avis en attente au lieu de le rendre public immédiatement. Les données structurées reposent volontairement sur les avis produit natifs ; les avis d’entreprise importés sont exclus du schema produit, et le renderer de schema limite les éléments d’avis intégrés tout en sortant quand même la note agrégée lorsque des avis natifs existent.
Les clients peuvent soumettre des galeries de projets depuis le parcours front-office du module. Dans PrestaShop, le showcase enregistre projets, titres et descriptions multilingues, images, catégorie et statut de modération, avec 20 images et 5 Mo par image par défaut.
Non. Le module vérifie si mprcheckoutrevolution est installé et activé. Lorsqu'il est actif, ce module lui cède l'interface de modification des commandes au lieu de gérer lui-même les hooks de modification de commande.
Dans PrestaShop, le H1 de page catégorie est le nom de la catégorie ; modifier le titre pour le SEO change donc normalement vos libellés de menu et fils d’Ariane, ce que vous ne voulez généralement pas. La solution consiste à remplacer le H1 indépendamment. Avec Custom Category H1, vous stockez une valeur H1 séparée par catégorie et le module l’insère dans la page catégorie via les hooks PrestaShop, en laissant le nom de l’objet Category (et donc la navigation et les fils d’Ariane) intact. Cela vous permet de cibler un titre riche en mots-clés comme « Receveurs de douche étanches pour salles d’eau » tandis que le menu reste court, par exemple « Receveurs ». Notez que les catégories racines sont volontairement exclues, car elles ne rendent pas une page catégorie front-office normale où un H1 visible acheteur s’appliquerait. Utilisez un H1 clair et unique par catégorie et gardez-le aligné avec la balise title de cette page, consultez notre guide SEO PrestaShop.
Le module stocke les remplacements dans des tables dédiées pour les lignes d’override, les valeurs de langue et les assignations de catégories. Les valeurs par défaut sont activé, afficher le champ dans l’édition de catégorie, remplacer le nom de page catégorie dans le contenu catégorie filtré, appliquer la même valeur aux libellés de listing produit, se rabattre sur la langue par défaut, se rabattre d’une valeur spécifique boutique vers une valeur toutes boutiques, retirer les balises HTML et normaliser les espaces. Le repli vers catégorie parente existe mais est désactivé par défaut pour éviter les titres dupliqués entre catégories enfants.
Pour le travail SEO en masse, un override peut être assigné à plusieurs catégories. Si un marchand modifie ensuite directement une catégorie et que cette catégorie appartient à un override partagé, le code détache cette catégorie seule et crée un override local à la catégorie, en laissant l’override partagé pour les autres. La valeur H1 peut utiliser des placeholders comme {category_name}, {nb_products}, {page}, {page_label}, {shop_name} et {lang}. La pagination peut aussi ajouter automatiquement un libellé de page lorsqu’elle est activée. Le module change les données de catégorie rendues ; il ne renomme pas l’enregistrement de catégorie PrestaShop stocké.
Il enregistre displayHeader, displayOrderConfirmation, actionValidateOrder et actionCustomerAccountAdd. Ces hooks rendent le tracking navigateur et mettent en queue les données de conversion liées aux commandes ou inscriptions.
Le formulaire propose la virgule, le point-virgule, la tabulation et le pipe. Le contrôleur convertit l'option tab en véritable caractère de tabulation avant de diffuser le CSV.
Le schéma inclut des tables pour les équipes, employés d'équipe, mappings équipe-statut, statuts de workflow et traductions, historique de commande, commentaires de commande, rappels, notifications et préférences de notification des employés.
Non. Le code de détection vérifie si la référence produit commence par mpr-pack-. Le contenu du pack est ensuite lu depuis la table propre au module mpr_pack_content.
Le hook vérifie actionDispatcherBefore et ne traite que Dispatcher::FC_FRONT et Dispatcher::FC_MODULE. Les dispatches Back Office sont ignorés.
hookPaymentOptions() exige un module actif, une configuration activée, un client connecté, au moins une condition de paiement active assignée aux groupes du client et assez de crédit pour le total du panier courant.
Il détecte le pays du visiteur dans un ordre de fallback fixe. Le module lit d’abord l’en-tête Cloudflare HTTP_CF_IPCOUNTRY lorsqu’il existe et n’est pas XX. Si ce n’est pas disponible, il tente le GeoIP PrestaShop via GeoIp::getCountryByAddr($ip) et reconvertit le nom de pays renvoyé en code ISO. Si GeoIP est indisponible, il vérifie enfin le cookie de contexte PrestaShop iso_code_country.
1. Cloudflare reverse proxy sends HTTP_CF_IPCOUNTRY=US -> module stores country code US and resolves the country name.
2. No Cloudflare header -> PrestaShop GeoIP returns United States -> module looks up ISO code US.
3. GeoIP unavailable -> PrestaShop cookie iso_code_country=US is used.
4. No signal -> empty country code and empty country name.Cela signifie que les bans pays dépendent du signal disponible pour cette requête. Si vous vous appuyez sur la détection pays Cloudflare, assurez-vous que le trafic boutique passe réellement par Cloudflare afin que l’en-tête soit présent.
L’IP visiteur utilisée pour GeoIP vient de Tools::getRemoteAddr() lorsque PrestaShop la fournit. Le module possède une chaîne de fallback pour HTTP_CF_CONNECTING_IP, HTTP_X_REAL_IP, la première valeur de HTTP_X_FORWARDED_FOR, puis REMOTE_ADDR. C’est important, car la qualité GeoIP dépend de la vraie IP client, pas de l’IP d’un proxy intermédiaire.
Un ban pays ne correspond que lorsque la requête courante a un code pays non vide. Si Cloudflare envoie XX, que GeoIP manque, que le lookup de nom de pays ne peut pas mapper le résultat GeoIP vers un code ISO, et que le cookie est absent, alors les règles uniquement pays ne se déclencheront pas pour cette requête. VPN, proxies et configuration CDN peuvent aussi faire différer le pays détecté de la localisation physique de l’acheteur.
Le contrôleur checkout personnalisé redirige les acheteurs vers la page de commande native PrestaShop lorsque le one page checkout est désactivé. Le module n'impose donc pas son flux si le paramètre one_page_checkout_enabled est coupé. Cela garde le réglage lié aux paramètres du module et au comportement réel de PrestaShop.
Oui, le module inclut des outils d'import et d'export pour le contenu blog. Le contrôleur admin PrestaShop peut importer du XML WordPress WXR, avec commentaires optionnels, et exporter les données blog en XML ou JSON via le service BlogExporter.
La bannière réapparaît lorsque le cookie de consentement est absent ou expire. Sur le front PrestaShop, le JavaScript lit mprcookie_consent et masque la bannière pour les visiteurs connus; l'expiration configurée contrôle la duree de conservation, avec 365 jours par défaut.
Oui, le module dispose d'un interrupteur d'affichage mobile. Avant de rendre le widget Crisp, le guard PrestaShop vérifie le réglage SHOW_MOBILE et le contexte appareil; si l'affichage mobile est désactivé et que le contexte est mobile, aucun script Crisp n'est sorti.
Non. S2S_ENABLED vaut false par défaut. Le panneau de readiness indique explicitement que le S2S est optionnel, et le tracking Pixel navigateur peut fonctionner avec un Marketer ID valide et le tracking navigateur activé.
Oui, les marchands peuvent definir des règles de declenchement pour les evenements Criteo pris en charge. La configuration PrestaShop accepte des règles JSON validées avec declencheurs clic, URL, contrôleur ou evenement DOM, puis normalise les noms vers le vocabulaire OneTag autorisé.
Le Front Controller accepte un nom d'événement et des paramètres JSON, refuse les payloads de plus de 8192 caractères, conserve au maximum 50 clés normalisées par niveau, limite la profondeur d'imbrication et tronque les chaînes à 512 caractères.
Non, la désinstallation ne supprime pas les tables cron partagées. Le chemin de désinstallation PrestaShop retire le menu admin du module et desinscrit ses propres tâches, mais conserve volontairement les tables car d'autres modules MPR peuvent dépendre de la même infrastructure.
Non, les catégories racines sont refusées par la logique d'enregistrement des overrides. Le contrôleur admin PrestaShop vérifie que les catégories sélectionnées sont des catégories storefront, car les racines ne rendent pas de pages catégorie normales ou un H1 visible s'appliquerait.
Oui, le module inclut un scanner de cookies du front. Il peut explorer une URL PrestaShop, inspecter les en-têtes Set-Cookie et les affectations document.cookie inline, stocker les nouveaux cookies non catégorisés et suggérer des catégories pour les motifs connus.
Oui, il peut utiliser des motifs user-agent comme cibles de bannissement. Dans l'admin PrestaShop, une règle peut utiliser du texte simple pour une recherche contient insensible à la casse ou une regex entre slashs, et être combinee avec IP, CIDR ou pays.
Non, les fichiers joints ne sont pas traités par le code actuel de soumission. La liste des champs admin contient un type fichier, mais le processeur lit les valeurs avec Tools::getValue et ne gère pas le tableau PHP files, les chemins de stockage ni les pièces jointes.
Oui. Le validateur accepte des chiffres séparés par des virgules ou des espaces, dans la limite des règles de longueur configurées, ce qui permet de stocker plusieurs IDs numériques dans le champ Marketer ID.
Le panneau de diagnostics inclut une action Retry failed events. Elle appelle le reset de queue partagé pour ce module et le provider outbrain, puis remet les événements échoués au statut pending.
Le module stocke les IDs produits dans le cookie navigateur du visiteur mprrecent_ids. Le cookie est écrit avec le chemin /, une durée de vie de 30 jours et SameSite=Lax.
Non. Le contrôleur AJAX crée un objet Product pour chaque ID demandé et ignore les entrées non chargées ou inactives avant de renvoyer les données de carte produit.
La réponse AJAX inclut le nom de chaque produit, l'URL produit, l'URL de l'image de couverture avec home_default et un prix formaté. Le script front rend ces valeurs sous forme de cartes produit compactes.
Aucun compte n’est requis, et la description source indique que cela fonctionne pour les invités, clients connectés et visiteurs récurrents. Le module mémorise les pages produit récentes dans un cookie navigateur plutôt que de remplir une table d’historique utilisateur PrestaShop. Vous devez quand même décrire l’usage des cookies dans vos informations de confidentialité ou cookies lorsque les exigences légales de votre boutique l’imposent.
Le script front-office utilise un cookie nommé mprrecent_ids. Sur les pages produit, il place l’ID produit courant au début de la liste, supprime les doublons, limite la liste au maximum configuré et écrit le cookie pour 30 jours avec SameSite=Lax. La valeur d’installation par défaut est MAX_PRODUCTS=8, et le hook d’affichage par défaut est displayFooterProduct.
Lorsque le widget est rendu, le navigateur lit le cookie et poste la liste d’IDs produit au contrôleur AJAX du module. Le contrôleur nettoie les IDs avec intval, retire les valeurs vides, limite la requête à 20 IDs et ne renvoie que des produits actifs. La réponse contient l’ID produit, le nom, l’URL, l’image de couverture et le prix formaté afin que le widget puisse dessiner la liste de produits récents.
Le module ne construit donc pas un profil de navigation côté serveur lié à un compte client. Le serveur reçoit tout de même les IDs de produits récents pendant la recherche AJAX, et les IDs sont stockés dans le cookie navigateur du visiteur, donc la fonctionnalité reste du tracking basé sur cookie du point de vue de l’avis de confidentialité.
Saisissez l’AdRoll Advertiser ID depuis adroll_adv_id, saisissez le Pixel ID depuis adroll_pix_id, activez le tracking navigateur, et choisissez les événements à envoyer. Les deux IDs doivent contenir uniquement lettres, chiffres, underscores ou tirets, et le tracking reste inactif tant que les IDs ne sont pas valides et que le module n’est pas activé.
- Configuration requise : Advertiser ID, Pixel ID et tracking navigateur activé.
- Événements de parcours page : page view, product view, checkout start et search.
- Événements d’interaction : add to cart, add to wishlist, signup et événements navigateur personnalisés configurés.
- Événement purchase : envoyé sur la confirmation de commande lorsque le tracking purchase est activé.
Le module est une intégration Pixel navigateur. Ses propres métadonnées de démo marquent l’achat côté serveur AdRoll comme indisponible, car l’accès public AdRoll S2S n’est pas exposé comme un flux stable token/endpoint dans ce module.
À l’installation, le tracking navigateur lui-même est désactivé par défaut, tandis que les interrupteurs d’événements standard sont activés par défaut. Cela permet à un marchand de configurer les IDs d’abord, puis d’activer le tracking quand il est prêt. L’exclusion employés et le respect du consentement marketing sont tous deux activés par défaut, donc les employés back-office naviguant le front-office et les visiteurs sans consentement marketing pris en charge peuvent être supprimés avant l’envoi d’événements.
Le hook header prépare la file AdRoll, définit window.adroll_adv_id, window.adroll_pix_id et window.adroll_version='2.0', puis charge https://s.adroll.com/j/roundtrip.js. Les événements header sont construits côté serveur pour page view, product view, checkout start, search et signup, tandis que add-to-cart et wishlist sont attachés en JavaScript aux événements PrestaShop ou sélecteurs de boutons courants.
Les événements navigateur personnalisés sont optionnels et désactivés par défaut. S’ils sont activés, le JSON doit être un tableau ou un objet avec un tableau events. Les noms d’événements sont limités aux lettres, chiffres, underscores et tirets, avec une limite de 64 caractères, et ce module limite les événements personnalisés à 15 noms d’événements distincts. Les déclencheurs pris en charge sont click, url, controller et event.
[{"event":"GalleryBrowse","trigger":"click","selector":".product-images img","params":{"segment_name":"gallery_browse"}}]Oui, le tracking purchase envoie la valeur de commande et la devise depuis la page de confirmation de commande PrestaShop. Le module construit aussi le nombre d’articles, la référence de commande, les IDs produit, noms, catégories, prix et quantités, puis envoie l’événement purchase via le pixel navigateur quand le tracking purchase est activé.
Le hook de confirmation de commande vérifie d’abord la porte normale de tracking : le module doit être actif, les IDs doivent être valides, l’exclusion employé ne doit pas bloquer la requête, le consentement marketing doit passer quand il est activé, et TRACK_PURCHASE doit être actif. Il accepte ensuite order ou objOrder depuis les paramètres du hook PrestaShop et construit le payload purchase depuis cette commande chargée.
Le mapping de valeur est explicite. Les données de conversion communes sont converties en paramètres de style AdRoll : value devient conversion_value, currency devient adroll_currency, num_items reste le nombre d’articles, order_id est défini sur la référence de commande PrestaShop, et les données produit deviennent product_id, content_ids et un tableau products avec item ID, nom, prix et quantité lorsque disponible.
L’événement reste côté navigateur. Le template appelle window.mpradrollTrack('purchase', params, 'Order confirmation') lorsque le script header est présent, ou se rabat sur window.__adroll.track/window.adroll.track. Si la fonction legacy record_user d’AdRoll existe, le template l’appelle aussi, mais le module n’envoie pas de requête purchase server-to-server.
Oui. Lorsque MPRADROLLPIXEL_RESPECT_CONSENT est activé, le module vérifie les modules de consentement cookies pris en charge avant de rendre ou déclencher le tracking AdRoll. Avec mprcookiesrevolution, le consentement marketing est accordé seulement quand le cookie mprcr_consent contient marketing:1. Avec mprcookiebanner, le consentement est accordé quand mprcookie_consent=granted. Si le cookie pertinent manque, le module se rabat sur la valeur DEFAULT_CONSENT de ce module de consentement.
mprcookiesrevolution allowed: mprcr_consent=essential:1|marketing:1|statistics:1
mprcookiesrevolution blocked: mprcr_consent=essential:1|marketing:0|statistics:1
mprcookiebanner allowed: mprcookie_consent=grantedSi aucun module de consentement pris en charge n’est actif, le contrôle de consentement ne bloque pas le tracking. L’exclusion employés peut toujours supprimer le tracking séparément lorsque MPRADROLLPIXEL_EXCLUDE_EMPLOYEES est activé.
Les valeurs par défaut d’installation sont orientées confidentialité : RESPECT_CONSENT=1 et EXCLUDE_EMPLOYEES=1. La méthode côté serveur canTrack() renvoie false si le module est inactif, si un contexte employé valide navigue le front-office, ou si le consentement marketing n’est pas accordé selon les contrôles des modules de consentement pris en charge.
Le template navigateur effectue aussi un contrôle de consentement avant de charger AdRoll. Lorsqu’un module de consentement pris en charge est actif, il vérifie window.MPRCR.isGranted('marketing') si disponible, puis les deux mêmes cookies. Si ce contrôle côté client échoue, le script retourne avant de charger roundtrip.js ou de déclencher les événements en file. Piège pratique : le contrôle côté client ne connaît pas la valeur DEFAULT_CONSENT côté serveur, donc une configuration qui dépend d’un consentement granted par défaut sans cookie de consentement doit être testée dans le navigateur.
Non, ce module envoie les événements AdRoll via le pixel navigateur, pas via une API serveur publique. Le code PrestaShop contient une note de démo indiquant qu'AdRoll S2S est une beta sous support; en production il charge roundtrip.js et envoie seulement des événements navigateur.
Utilisez ce module pour définir des noms d’affichage séparés pour les pages CMS PrestaShop. Il stocke un nom d’affichage par id_cms, langue et boutique dans sa propre table mprcmsnames, donc l’enregistrement CMS natif et son meta_title SEO ne sont pas réécrits dans la table CMS.
- Exemple : gardez le meta title de la page CMS comme
Terms and Conditions | My Shoppour le SEO. - Ouvrez l’écran CMS Display Names du module et trouvez cette ligne de page CMS par ID et meta title existant.
- Saisissez un nom d’affichage plus court comme
Termsdans le champ Display Name et enregistrez. - Sur le front-office, le titre visible de la page CMS reçoit le nom d’affichage via
filterCmsContent, et les liens CMS correspondant au motifcms-page-linkde PrestaShop sont remplacés dans le HTML final. - Si vous videz le champ de nom d’affichage, le module supprime sa ligne personnalisée pour cette page CMS et la boutique retombe sur le
meta_titleCMS original.
La séparation pratique est donc : utilisez le titre CMS natif pour les extraits de recherche et le comportement du titre navigateur, et utilisez ce module pour des titres de page, liens footer et libellés de menu plus courts que les acheteurs scannent réellement.
Le module possède deux chemins front-office. D’abord, filterCmsContent modifie l’objet CMS passé au template de page en remplaçant meta_title par le nom d’affichage stocké pour la langue et la boutique courantes. Ensuite, actionOutputHTMLBefore édite le HTML final pour les liens CMS correspondants avant l’envoi de la réponse.
Le commentaire source est explicite : la vraie balise HTML <title> n’est pas affectée, car PrestaShop la construit via Meta::getMetaTags() en utilisant son propre chemin SQL. C’est pourquoi ce module peut raccourcir les noms visibles sans écraser le titre SEO CMS stocké par PrestaShop.
Le markup du thème compte toujours. Le relabeling des liens ne s’exécute que sur les ancres qui correspondent au motif CMS link attendu par le module, avec l’ID de page CMS dans link-cms-page-{id}-... et l’attribut de classe exact cms-page-link dans l’ordre attendu par la regex. Si un thème construit les menus CMS avec un markup différent ou du HTML imbriqué dans le texte d’ancre, le titre peut encore être changé mais le texte du lien peut ne pas être remplacé.
Non, il ne réécrit pas la balise HTML title. Le module est volontairement limité au contenu CMS visible et au texte de liens CMS rendu, afin que PrestaShop continue d’utiliser le meta title CMS original pour le head de page et les extraits de recherche.
Le commentaire source indique que la balise <title> est construite par le chemin Meta::getMetaTags() de PrestaShop et n’est pas affectée. Le module ne met pas à jour la table CMS native, ne se branche pas dans la génération des meta tags et n’écrit pas de nouveau titre SEO dans PrestaShop.
Ce qu’il peut changer est l’objet CMS passé via filterCmsContent. Si le template de page utilise le meta_title de cet objet CMS filtré comme titre visible, les acheteurs voient le nom d’affichage plus court sur la page. Séparément, actionOutputHTMLBefore peut remplacer le texte des liens CMS correspondants dans le HTML final. Ce sont des changements de contenu visible, pas des changements de balises head.
Pour le travail SEO, continuez à modifier le vrai meta title CMS dans la page CMS native de PrestaShop. Utilisez ce module quand le titre SEO est trop long pour les menus, footers, breadcrumbs ou titres visibles sur page.
Il renomme les liens CMS qui correspondent au markup CMS link attendu par PrestaShop. Le hook de sortie cherche une ancre dont id commence par link-cms-page-{id}- et dont la classe est cms-page-link, puis remplace le texte de lien simple par le nom d’affichage stocké pour la langue et la boutique courantes.
<a id="link-cms-page-3-1" class="cms-page-link" href="/content/3-terms-and-conditions">Terms and conditions</a>Ce motif compte pour les thèmes personnalisés : si le lien CMS a une autre classe, pas d’id link-cms-page-..., si la classe apparaît avant l’id dans le markup ciblé par le module, ou si le libellé est construit avec du HTML imbriqué plutôt qu’un texte simple, le remplacement de sortie peut ne pas matcher.
La regex est volontairement étroite. Elle attend l’attribut id avant class="cms-page-link", et capture du texte simple entre les balises ouvrante et fermante de l’ancre. Un lien avec plusieurs classes comme class="footer-link cms-page-link", un span dans l’ancre, ou un composant de menu entièrement personnalisé peut sortir de ce motif.
Le remplacement ne fait rien non plus dans le back-office et retourne tôt s’il n’y a pas de noms d’affichage pour la langue et la boutique courantes. Si le footer ou menu CMS de votre thème n’est pas renommé, inspectez d’abord le markup d’ancre généré ; souvent, la correction consiste à faire sortir au template le motif natif PrestaShop d’ID et de classe CMS link.
Oui, les noms d’affichage sont stockés par page CMS, langue et boutique. La table du module utilise id_cms, id_lang et id_shop comme clé, et enregistrer une valeur vide supprime ce libellé stocké afin que PrestaShop retombe sur le titre CMS natif.
La recherche front-office est aussi spécifique à la langue et à la boutique. Elle charge les lignes de mprcmsnames où id_lang égale la langue du contexte courant et id_shop égale la boutique du contexte courant. Il n’y a pas de fallback large id_shop=0 dans cette recherche, donc un nom d’affichage enregistré pour une boutique n’est pas automatiquement réutilisé par une autre.
À l’enregistrement, le module boucle sur les pages CMS et les langues, remplaçant les lignes lorsqu’une valeur est postée et supprimant les lignes lorsque la valeur soumise est vide. C’est pourquoi vider un champ est une vraie réinitialisation, pas seulement un libellé personnalisé vide.
Détail d’implémentation à vérifier dans cette version source : la table de configuration rendue affiche l’input de langue par défaut pour chaque page CMS. La base de données et la logique de sauvegarde prennent en charge id_lang, mais le formulaire visible dans ce checkout ne rend pas de colonnes d’input séparées pour chaque langue. Si vous avez besoin de noms d’affichage non langue par défaut, confirmez que la build installée expose ces inputs ou ajoutez-les avant de vous fier à l’édition multilingue via le formulaire standard.
Oui, le module génère automatiquement un mot de passe pour les formulaires d’inscription et de checkout pris en charge. Dans PrestaShop, il cible les champs de mot de passe courants client, authentication et checkout, puis remplit les inputs password, passwd, confirmation et password_confirmation lorsque le périmètre de page configuré correspond.
Les valeurs par défaut d’installation activent le module, l’appliquent à l’inscription et au checkout, masquent les champs de mot de passe, génèrent un mot de passe de 12 caractères, et incluent majuscules, chiffres et caractères spéciaux. Les contrôleurs applicables sont authentication, registration et identity pour l’inscription, plus order, orderopc et order-opc pour le checkout.
Sur PrestaShop 1.7+, le module enregistre ses CSS et JavaScript front via actionFrontControllerSetMedia. Sur PrestaShop 1.6, il charge les assets depuis displayHeader. Le même hook header injecte les réglages de mot de passe dans window.mprcustomerpassword_config pour que le JavaScript les utilise.
Le script front trouve les champs nommés comme password, passwd, confirmation et password_confirmation, et scanne aussi les formulaires courants registration/authentication pour tout input type=password. Il génère un mot de passe par page, remplit tous les champs correspondants avec la même valeur, définit autocomplete=new-password, et ajoute un marqueur caché mprcustpass_auto=1 au formulaire.
- Mode caché : le wrapper du champ mot de passe est masqué et marqué
aria-hidden. - Mode optionnel dans le code : le champ est affiché avec la valeur générée et un message d’information, mais le script met le champ en
readonly. - Formulaires checkout dynamiques : un
MutationObserverretraite les champs de mot de passe nouvellement insérés, et le script protège les valeurs générées à la soumission ainsi qu’avec un contrôle périodique.
Oui, il peut envoyer le mot de passe généré lorsque le mode email est défini sur send password. Le hook d’ajout de compte PrestaShop n’envoie cet email que lorsque le formulaire soumis inclut le marqueur d’auto-génération du module, donc les comptes clients normaux ne sont pas traités par erreur.
La valeur par défaut EMAIL_MODE est send_password. Lorsque actionCustomerAccountAdd s’exécute, le module vérifie d’abord qu’il est activé, puis cherche mprcustpass_auto dans le formulaire soumis. Ce marqueur est ajouté par le JavaScript seulement après qu’il a rempli les champs de mot de passe, donc le chemin email est lié aux mots de passe générés par le module.
Pour l’email de mot de passe, le module lit le mot de passe soumis depuis password d’abord et se rabat sur passwd pour les anciens formulaires PrestaShop. Si aucune valeur n’est présente au moment du hook, il retourne sans envoyer. Quand il envoie, il utilise le template mail mprcustomerpassword_account et transmet le prénom, le nom, l’email, le mot de passe généré, le nom de boutique et l’URL de boutique du client.
Il existe deux alternatives importantes. Avec EMAIL_MODE=silent, le hook sort sans envoyer d’email de mot de passe. Avec EMAIL_MODE=setup_link, il envoie un lien de réinitialisation/configuration au lieu du mot de passe généré. Les marchands qui ne veulent pas envoyer de mots de passe par email doivent utiliser setup-link ou silent mode plutôt que le mode par défaut send-password.
Oui, le module peut envoyer un lien de configuration au lieu du mot de passe généré. Dans PrestaShop, le mode setup-link crée un token de reset, stocke une validité de 24 heures sur l’enregistrement client ou les champs legacy, et envoie au client un lien vers la page de mot de passe.
Ce chemin est sélectionné avec EMAIL_MODE=setup_link. Le même hook account-add et le marqueur mprcustpass_auto s’appliquent encore, donc l’email de configuration est seulement envoyé pour les comptes où le script front du module a généré et soumis les champs de mot de passe.
Sur les objets client PrestaShop récents qui exposent reset_password_token, le module crée un token depuis random_bytes(32), le rend compatible URL en remplaçant les caractères base64 dangereux, le stocke dans reset_password_token, définit reset_password_validity à 24 heures dans le futur, met à jour le client, et construit une URL de page mot de passe avec token, id_customer et reset_token.
Pour le chemin legacy, le module crée un token MD5, met à jour directement les champs reset_password_token et reset_password_validity de la table customer avec une fenêtre de validité de 24 heures, et construit l’URL de page mot de passe avec token et id_customer. L’email utilise le template mprcustomerpassword_setup avec {setup_link}, les valeurs d’identité client, le nom de boutique et l’URL de boutique.
Le mot de passe généré est toujours utilisé pour permettre à PrestaShop de créer le compte pendant le checkout ou l’inscription. La différence est ce que le client reçoit ensuite : setup-link mode envoie un lien pour choisir un mot de passe, tandis que send-password mode envoie le mot de passe généré lui-même.
Non, le mode optionnel affiche le mot de passe généré mais le script actuel rend le champ en lecture seule. Dans PrestaShop, le mode caché masque le bloc complet, tandis que le mode optionnel affiche la valeur avec une note.
Ajoutez un Facebook Page Access Token et un Page ID, puis activez le feed. Dans PrestaShop, le module récupère les posts depuis la Facebook Graph API et peut les rendre dans les hooks home, footer, left column ou right column.
Le formulaire de connexion attend un Page Access Token et un Page ID. L’aide admin oriente les marchands vers une app Facebook Developer avec accès Pages API et les permissions pages_read_engagement et pages_read_user_content. Page Name est optionnel et sert à l’en-tête du feed lorsqu’il est fourni.
- Le hook d’affichage par défaut est
displayHome, mais le module prend aussi en chargedisplayFooterBefore,displayFooter,displayLeftColumnetdisplayRightColumn. - Le nombre de posts par défaut est
6, la mise en page par défaut est une grille 3 colonnes, et le cache feed partagé vaut par défaut3600secondes. - Si l’access token ou le Page ID manque, la récupération via Facebook API ne renvoie aucun post, donc le bloc front-office n’a rien à rendre.
MPRFB_ACCESS_TOKEN=your-page-token
MPRFB_PAGE_ID=your-page-id
MPRFB_DISPLAY_HOOK=displayHome
MPRFB_POST_COUNT=6Une fois configuré, le module appelle Facebook Graph API v21.0 pour les posts de la page, stocke le feed normalisé en cache, et ne rend que dans le hook sélectionné dans les réglages du module.
Oui, il peut afficher le texte du post, les médias, la date, les réactions, partages, commentaires et informations d’auteur. Dans PrestaShop, ces options d’affichage sont configurées séparément, et les posts partagés peuvent être exclus lorsque le réglage EXCLUDE_SHARED est activé.
Les interrupteurs concernés sont des réglages séparés comme SHOW_TEXT, SHOW_MEDIA, SHOW_DATE, SHOW_REACTIONS, SHOW_SHARES, SHOW_COMMENTS et SHOW_AUTHOR. Le texte est activé par défaut et tronqué avec des points de suspension lorsqu’il dépasse TEXT_LENGTH, qui vaut par défaut 200 caractères.
- Les médias sont tirés d’abord des attachments et subattachments Facebook, avec
full_picturecomme fallback. - Les compteurs de réactions, commentaires et partages viennent des champs summary renvoyés par Facebook, donc les compteurs affichés dépendent de ce que la réponse API inclut.
- Lorsque
EXCLUDE_SHAREDest activé, les posts avecstatus_typeégal àshared_storysont ignorés. - Les posts sans texte de message ni image sont ignorés avant rendu.
C’est important, car un marchand peut construire un bloc social proof compact avec seulement images et compteurs d’engagement, ou un feed éditorial plus complet avec légendes, dates et attribution de page.
Les projets approuvés prennent en charge le vote communautaire et les commentaires imbriqués. Le nombre de votes et de vues est enregistré par projet, ce qui indique simplement quels travaux de clients suscitent le plus d'intérêt.
Oui. Le module met en cache le feed Facebook dans un fichier JSON nommé mprfb_feed_cache.json. Le cache stocke un timestamp cached_at et les posts récupérés, puis réutilise ces posts jusqu’à expiration de la durée configurée.
Cache file: mprfb_feed_cache.json
Duration setting: MPRFB_CACHE_DURATION=3600
Admin refresh: submitMprfbSync clears the file; the next front-office feed load fetches fresh posts and writes cached_at + postsLa durée de cache par défaut dans le trait de feed partagé est 3600 secondes. Le formulaire de configuration du module expose des durées courantes comme 30 minutes, 1 heure, 2 heures, 6 heures, 12 heures et 24 heures. Les actions admin refresh et clear-cache suppriment toutes deux le fichier de cache, donc la prochaine requête feed est forcée vers la source Facebook au lieu de servir des posts en cache obsolètes.
Le cache est indépendant des requêtes, donc les acheteurs normaux ne déclenchent pas un appel Facebook API à chaque page vue. Si le fichier cache est absent, vide, JSON invalide ou plus ancien que la durée configurée, le trait de feed partagé le considère expiré et récupère à nouveau. L’enregistrement de la configuration liée au feed vide aussi le cache du feed, ce qui évite de mélanger des changements de layout ou de nombre avec d’anciennes données de posts.
Pour les boutiques actives, c’est la principale protection contre les chargements de page lents et la pression API évitable. Pour les lancements de campagne, utilisez l’action admin refresh après publication sur Facebook si vous voulez que le bloc front-office récupère immédiatement le nouveau contenu au lieu d’attendre la prochaine expiration de cache.
Oui, il peut publier des articles de blog sur Facebook, mais le workflow d’autopublish est construit autour des articles MPR Blog Revolution, pas de tous les modules blog tiers possibles. Le module Facebook utilise le trait social publisher partagé, écoute les hooks PrestaShop object add et update, vérifie que l’auto-publish est activé, vérifie la présence d’un objet de style Blog Revolution ou Post, et continue seulement lorsque l’objet a status = 1.
La prévention des doublons est stockée dans la table mpr_social_publish. Avant l’envoi, le module vérifie si mprfacebookpostsintegration a déjà publié l’objet de type blog_post avec cet ID de post vers la plateforme facebook. Les envois réussis sont enregistrés avec l’ID de post plateforme, l’URL plateforme, la légende, les URL médias et le statut published, donc les hooks add ou update ultérieurs ignorent le même post au lieu de l’envoyer à nouveau.
Les légendes viennent du template auto-publish du module Facebook. Les placeholders pris en charge sont {title}, {excerpt}, {url} et {shop_name}. Si l’article de blog a une image mise en avant, le publisher construit son URL média depuis img/mprblogrevolution/posts/. Si les identifiants Facebook manquent, si le publisher n’est pas configuré, ou si une condition plateforme requise n’est pas remplie, le chemin auto-publish retourne sans publier.
Le publisher spécifique Facebook est configuré uniquement lorsque PAGE_ID et ACCESS_TOKEN existent. Il utilise Facebook Graph API v21.0, prend en charge les posts texte, posts lien et posts photo/image dans le chemin publish() implémenté, permet un élément média par envoi, et a une limite de caractères de 63206. Un post image media-only est envoyé via l’endpoint photos de la page, tandis que les posts lien ou texte utilisent l’endpoint feed de la page.
Bien que getSupportedMediaTypes() liste actuellement video, le publisher implémenté n’upload pas de vidéo et n’appelle pas d’endpoint videos. Traitez la publication vidéo comme non prise en charge sauf si un vrai chemin de publication vidéo est ajouté.
MPRFB_AUTOPUBLISH=1
MPRFB_AUTOPUBLISH_CAPTION={title}
{excerpt}
Read more: {url}Le module ignore aussi son propre chemin publisher lorsque la prise de contrôle plus large mprsocialrevolution est active pour Facebook, afin que deux modules sociaux n’essaient pas de publier le même article de blog en même temps.
Le module ajoute des pages dédiées de galerie, catégorie, projet, soumission et un espace client « mes projets », chacune avec sa propre URL optimisée pour le SEO. Les projets approuvés mis en avant peuvent aussi s'afficher dans des zones choisies de la boutique.
Tous les textes de la galerie, catégories, projets et commentaires, sont stockés par langue, la galerie est donc entièrement multilingue. Le module fonctionne sur PrestaShop 1.6.1 à 9.x.
Oui, chaque profil de flux peut porter sa propre langue, devise, pays cibles et labels. C’est utile lorsqu’une boutique vend sur plusieurs marchés avec des wording catalogue ou structures publicitaires différents. Une séparation claire des feeds aide aussi les responsables à comprendre quel marché génère du revenu et lequel nécessite de l’attention.
Dans le modèle de feed, chaque profil stocke id_lang, id_currency, id_shop, target_country, feed_label, content_language et sync_mode. Un nouveau feed utilise par défaut des réglages français dans la source actuelle : target_country=FR, feed_label=FR et content_language=fr.
target_country=AE,AU,GB,US
feed_label=GB
content_language=en
sync_mode=file_only or apitarget_countryest normalisé en majuscules et peut être un code pays à deux lettres ou une liste séparée par virgules.feed_labelest normalisé en majuscules et doit respecter la forme de label de Google Merchant API : lettres majuscules, chiffres et tirets, jusqu’à 20 caractères.content_languageest normalisé en minuscules et doit être un code langue à deux lettres pour l’entrée produit API.- Pour la sync API, des profils de feed séparés sont généralement plus propres lorsque chaque marché a besoin d’un label, d’une devise ou d’une langue distincts.
Le contrôleur front de feed sert un feed précis par ID ou nom de fichier avec un token, utilise un cache TTL par défaut de 3600 secondes, et peut régénérer avec generate=1. Cela permet à une boutique PrestaShop de maintenir des feeds Merchant séparés sans mélanger pays, langues ou labels de campagne.
Non, la description source indique que les valeurs numériques internes de PrestaShop restent intactes dessous. Le module personnalise les numéros affichés sur les factures, bons de livraison et avoirs. Si vous avez besoin de personnaliser les références de commande elles-mêmes, la source recommande d’utiliser le produit séparé Custom Order Numbering.
Le module de facture confirme cette séparation dans le code : hookActionSetInvoice génère et logue la référence de facture formatée, mais laisse volontairement le numéro de facture stocké par PrestaShop numérique/natif. La chaîne formatée affichée est fournie plus tard via actionInvoiceNumberFormatted, et la génération de bon de livraison stocke la valeur numérique du compteur dans order_invoice.delivery_number.
Default invoice format: {DOC_TYPE}/{YYYY}/{NNNNNN}
Default delivery format: {DOC_TYPE}/{YYYY}/{NNNN}
Default credit slip format: {DOC_TYPE}/{YYYY}/{NNNN}Les valeurs générées sont enregistrées dans mprinvoicenumber_number avec type de document, IDs de commande, facture ou slip, valeur de compteur, motif et numéro formaté. Cela vous donne des documents visibles par le client personnalisés sans changer les IDs de commande ou références de commande aléatoires ; ceux-ci sont gérés par mprordernumber.
Le module génère un indicateur via displayProductListReviews. Son JavaScript trouve la miniature produit englobante et injecte un badge Bundle dans la zone image.
L'onglet liste les produits inclus configurés dans une grille. Chaque carte peut afficher l'image produit, le nom du produit, le prix formaté ou FREE pour un prix à zéro, ainsi qu'un lien vers le produit inclus.
Il inclut un helper dispatcher pour les routes rewrite-only. Lorsqu'une route n'a pas d'ID, il peut résoudre les slugs de catégorie, produit, CMS ou fabricant correspondants et mettre à jour les paramètres de requête en conséquence.
Oui. Le formulaire admin stocke le flag d'activation, et chaque hook front s'arrête immédiatement lorsque isFeatureEnabled() vaut false.
Le chemin côté serveur exige que CAPI soit active et qu'un access token Reddit soit configuré. L'Events Testing ID est optionnel et utilisé seulement lorsqu'il est présent.
Non, la source décrit des événements navigateur et des événements côté serveur fonctionnant en parallèle avec des ID de conversion partagés. Le chemin côté serveur peut aider à réduire les pertes lorsque le suivi navigateur est bloqué, tandis que le pixel navigateur continue de capturer le comportement côté client. Utiliser les deux avec soin donne à Reddit des signaux plus complets qu’un simple pixel collé.
Le suivi navigateur est préparé dans les hooks d’en-tête et de confirmation de commande. Le module peut émettre des événements comme PageVisit, ViewContent, Search, SignUp, InitiateCheckout, des événements de pont de type ajout au panier et Purchase. Quand l’API Conversions est activée, les événements correspondants sont mis en file côté serveur avec la même identité : les paramètres navigateur utilisent conversionId, tandis que la charge utile API stocke conversion_id dans les métadonnées de l’événement.
- Un Reddit Pixel ID est requis pour le suivi navigateur.
- L’API Conversions exige aussi un jeton d’accès, et le module envoie les données vers l’endpoint de conversions Reddit pour le pixel configuré.
- Les vérifications d’exclusion des employés et de consentement marketing passent par
canTrack()avant la préparation du suivi front-office. - La limite par défaut des lots de la file CAPI est
20, tandis que les chemins de pont front et d’achat traitent immédiatement de petits lots.
La configuration pratique consiste à garder le pixel navigateur actif pour les événements client habituels et à utiliser l’API Conversions comme signal côté serveur complémentaire, pas comme remplacement.
Le module mappe directement la plupart des actions standards, tandis qu'InitiateCheckout est envoyé comme événement personnalisé Reddit nommé InitiateCheckout dans le mapping côté serveur.
Oui. La configuration inclut l'exclusion des employés, et la barrière de suivi la vérifie avant de construire la sortie du pixel front ou d'autoriser les événements via le chemin de suivi du module.
La liste des hooks disponibles couvre displayHome, displayFooterCategory, displayLeftColumn, displayRightColumn, displayFooterBefore, displayFooterProduct, displayProductAdditionalInfo, displayOrderConfirmation2 et displayCrossSellingShoppingCart.
Oui, la description source inclut des collections de produits sélectionnées ainsi que des widgets dynamiques. Les collections choisies à la main sont utiles pour les campagnes, le merchandising éditorial et les promotions axées sur la marge. Les sources dynamiques sont utiles lorsque vous voulez que les meilleures ventes, les nouveautés ou les produits de retour en stock restent à jour avec moins de travail manuel.
Les collections sélectionnées sont stockées séparément des widgets. La table collection-produit stocke id_collection, id_product et position, et setProducts() réécrit cette liste dans l’ordre enregistré par l’admin. Un widget peut ensuite utiliser le type de widget collection et pointer vers la collection choisie.
- Les types de collection incluent
curated,staff_picks,seasonaletspotlight. - Les requêtes publiques de collection retournent les produits actifs de la boutique et conservent l’ordre collection-produit enregistré.
- Si le widget exige des images, le fournisseur filtre les produits sans image exploitable.
- Les types de widgets automatiques avec fournisseurs de produits implémentés incluent
bestsellers,new,sale,featured,trending,back_in_stocketcart_recommendations. recently_viewedest listé comme type/libellé de widget dans le modèle, maisgetProducts()n’a pas encore de cas fournisseur pour lui ; il ne doit donc pas être présenté comme une liste automatique fonctionnelle tant que cette implémentation n’est pas ajoutée.
Vous pouvez donc créer une collection de campagne choisie à la main pour un bloc de page d’accueil ou de page produit, tout en utilisant des blocs dynamiques implémentés ailleurs dans la même boutique PrestaShop.
Oui. Le modèle de widget stocke hide_products_without_images, et les requêtes produit/l'assemblage du provider utilisent ce drapeau pour exiger une image de couverture boutique pour de nombreuses sources de widgets.
Le module écoute actionUpdateQuantity. Lorsqu'une quantité produit passe de zéro ou moins à une valeur positive, il insère une ligne dans mprshowcaserevolution_stock_change, que la source de produits de retour en stock peut utiliser.
Installez et activez le module pour ajouter un bouton Ask a question sur les pages produit PrestaShop. Il s’affiche via le hook displayProductAdditionalInfo, ouvre un formulaire modal à côté des informations produit, et transmet le nom du produit, la référence et l’ID produit dans la demande.
À l’installation, le module stocke ENABLED=1, définit RECIPIENT_EMAIL depuis PS_SHOP_EMAIL, et utilise [Product Question] comme préfixe d’objet par défaut. Le hook assigne le nom du produit, la référence produit, l’ID produit, l’URL AJAX et une valeur de token cachée au template Smarty.
- Hook front :
displayProductAdditionalInfo. - Endpoint AJAX :
module/mpraskaboutproduct/ask. - Réglages admin : interrupteur d’activation, email destinataire et préfixe d’objet.
Le résultat est un formulaire de demande spécifique au produit sur la page produit, afin que le marchand reçoive le message avec le contexte produit plutôt qu’une demande de contact générique.
Oui, les clients envoient la demande produit directement depuis la modale du front-office. Le contrôleur front PrestaShop reçoit le nom de l’expéditeur, son email, le message, le nom du produit et l’ID produit via AJAX, puis retourne un message JSON de succès ou d’erreur sans obliger le client à ouvrir un client email.
Le template envoie une requête FormData au contrôleur front du module et met à jour la modale avec la réponse JSON. En cas de succès, le formulaire est réinitialisé et le client voit le message de réussite ; en cas d’échec de validation ou d’envoi mail, la même modale affiche l’erreur retournée.
- La requête est considérée invalide si le marqueur d’envoi attendu
sender_emailest absent. - Le contrôleur envoie au destinataire configuré du module, ou se rabat sur l’email de la boutique.
- Si le template mail
questiondu module existe, il est utilisé ; sinon le code revient au template cœur PrestaShopcontact.
La demande reste ainsi dans le parcours front-office PrestaShop et conserve le nom du produit ainsi que l’ID produit dans le corps de l’email.
Il valide la demande dans le contrôleur front AJAX avant d’envoyer l’email. Une requête doit soumettre sender_email, et les champs requis sont sender_name, sender_email et message. L’email est vérifié avec Validate::isEmail() de PrestaShop, et le message avec Validate::isCleanHtml().
POST /module/mpraskaboutproduct/ask sender_name=Alice&sender_email=alice@example.com&message=Can you confirm availability?&id_product=42&product_name=Demo product- L’absence du marqueur d’envoi
sender_emailretourne{"success":false,"message":"Invalid request."}. - Un nom, email ou message vide retourne
{"success":false,"message":"All fields are required."}. - Un email invalide retourne
{"success":false,"message":"Invalid email address."}. - Un HTML de message non sûr retourne
{"success":false,"message":"Invalid message content."}.
Si la validation réussit, le module envoie la demande à l’email destinataire configuré, avec repli vers l’email de la boutique lorsqu’aucun destinataire de module n’est défini.
Après validation, le contrôleur construit l’objet de l’email à partir du préfixe d’objet configuré plus le nom du produit soumis. Le message est échappé et converti avec nl2br() pour le template email. Le nom du produit et l’ID produit sont inclus dans les variables mail, afin que l’équipe puisse identifier l’article sans demander au client de renvoyer les détails.
La modale inclut un champ token caché, mais le chemin actuel du contrôleur valide les champs de requête et le contenu du message plutôt que ce token. Si une protection anti-spam plus forte est nécessaire, ajoutez-la autour du formulaire front plutôt que de supposer que ce contrôleur effectue une vérification de token CSRF.
Oui, le module vous permet de définir l’email destinataire et le préfixe d’objet pour les questions produit. Si aucun destinataire n’est configuré, le contrôleur front PrestaShop se rabat sur l’adresse email de la boutique, puis envoie le message avec le contexte produit inclus.
La classe de configuration expose RECIPIENT_EMAIL et SUBJECT_PREFIX. À l’installation, RECIPIENT_EMAIL est initialisé depuis PS_SHOP_EMAIL, et SUBJECT_PREFIX vaut par défaut [Product Question]. Dans le contrôleur front, un destinataire vide est remplacé par Configuration::get('PS_SHOP_EMAIL').
Recipient: mpraskaboutproduct.RECIPIENT_EMAIL or PS_SHOP_EMAIL
Subject: SUBJECT_PREFIX + product nameC’est utile lorsque les questions produit doivent aller vers une boîte commerciale, une équipe technique ou un bureau fournisseur plutôt que vers l’adresse de contact principale de PrestaShop.
Oui. Les avis sont contrôlés avant d’être enregistrés, et les contrôles échoués retournent une erreur de validation au lieu d’accepter l’avis silencieusement. La source inclut ces protections :
- Limite par même IP : lorsque
MIN_TIME_BETWEENest supérieur à zéro, le module vérifie si la même IP a publié un autre avis dans cette boutique dans le nombre de secondes configuré. - reCAPTCHA : lorsqu’il est activé, le module vérifie le token soumis auprès de Google. Il prend en charge v2 et v3 ; v3 utilise un seuil de score de
0.5. Un token manquant fait échouer le contrôle, tandis qu’une clé secrète manquante ou un problème de vérification réseau est traité comme non bloquant. - Contrôles des liens et balises : le contenu avec plus de deux URL est rejeté, et le HTML embarqué évident comme
<script>,<iframe>,<object>,<embed>et<form>est bloqué.
La protection par temps minimum est un contrôle du délai entre deux avis pour la même IP, pas un minuteur de chargement de formulaire. Pour utiliser reCAPTCHA comme protection active, activez-le et configurez la clé de site et la clé secrète dans les réglages du module.
Le flux de soumission plus large ajoute d’autres garde-fous pratiques. Les avis exigent un type d’entité valide, un ID d’entité, un contenu d’au moins 10 caractères et une note de 1 à 5. Les avis invités sont désactivés par défaut, et les clients connectés sont empêchés d’évaluer deux fois la même entité sauf si l’avis précédent a été marqué comme spam.
MODERATIONvaut par défaut1, donc les nouveaux avis sont stockés commependingsauf si la modération est désactivée.MIN_TIME_BETWEENvaut par défaut30secondes.- Pour les avis produit de clients connectés, le module peut marquer un avis comme achat vérifié lorsqu’il trouve une commande valide contenant ce produit.
- Les uploads de photos, lorsqu’ils sont activés, sont limités aux formats JPEG, PNG et WebP, avec des limites par défaut de 3 images et 2 MB par image.
Ce n’est pas pour autant un système de détection de fraude. Le code fournit limitation de fréquence, reCAPTCHA, contrôles de contenu, prévention des doublons, marquage d’achat vérifié et modération ; les marchands doivent donc garder la modération activée lorsque la qualité des avis compte.
Oui, les avis ne sont pas limités aux pages produit. Le module inclut une gestion d’entités pour les avis produit, catégorie, CMS et boutique, ainsi qu’une route publique d’avis, avec chaque zone d’affichage contrôlée par configuration et rendue via des hooks ou contrôleurs front-office PrestaShop.
Le modèle de données stocke les avis avec entity_type et entity_id, et le service de soumission accepte product, category, cms et store comme types d’entité valides. La page de réglages dispose d’interrupteurs séparés pour PRODUCT_REVIEWS, CATEGORY_REVIEWS, CMS_REVIEWS et STORE_REVIEWS ; seuls les avis produit sont activés par défaut dans les valeurs actuelles.
L’intégration automatique de page produit est le chemin le plus complet dans le code inspecté : les avis produit s’affichent via displayProductExtraContent, les étoiles de listing via displayProductListReviews, et le badge de note produit via les hooks de page produit. La page publique d’avis est exposée sous /reviews et peut filtrer les avis approuvés par type=product, category, cms ou store.
Allowed entity types: product, category, cms, store
Public route: /reviews
Filtered examples: /reviews?type=category or /reviews?type=storePour le placement sur catégorie, CMS et boutique, planifiez soigneusement l’emplacement front-office. La source prend en charge ces enregistrements d’avis et le hub d’avis, mais les pages produit disposent de la couverture de hooks intégrée la plus forte dans les fichiers inspectés.
Oui, des rappels peuvent être créés après qu’une commande atteint le statut livré configuré. Le hook de statut de commande PrestaShop planifie les rappels uniquement lorsque la fonctionnalité de rappel est activée, et le module stocke des lignes de rappel avec les données de commande, client, délai et statut d’avis.
Plus précisément, le hook inspecté écoute actionOrderStatusPostUpdate et vérifie si le nouveau statut de commande PrestaShop a son indicateur delivery défini. Lorsque REMINDERS_ENABLED est activé, il charge les produits de la commande et crée une ligne de rappel par produit via ReviewReminder::createForOrder().
REMINDERS_ENABLEDvaut par défaut0.REMINDER_DELAY_DAYSvaut par défaut7.- Les lignes en double pour la même commande et le même produit sont ignorées.
- Les produits déjà évalués par ce client sont ignorés.
- Chaque ligne de rappel stocke un token de 64 caractères et un statut comme
pending,sentoureviewed.
Le modèle inclut aussi des helpers pour trouver les rappels en attente après le délai configuré, les marquer comme envoyés, les marquer comme évalués et charger un rappel par token. Dans les fichiers inspectés, j’ai trouvé la planification et le modèle de données, mais pas un flux cron complet d’envoi d’emails qui appelle ces méthodes helper.
Oui, le module inclut des gestionnaires d’avis externes pour Google Business Profile et Trustpilot. Lorsque les identifiants API requis sont configurés, les avis externes peuvent être synchronisés dans des tables locales d’avis externes, puis affichés ou agrégés selon les réglages du module PrestaShop.
La table d’avis externes stocke la source, l’ID d’avis source, l’auteur, le titre, le contenu, la note, l’URL source, la date de publication, la langue, l’ID produit optionnel, l’ID boutique, les données API brutes et les horodatages de synchronisation. Une clé unique sur source plus source_review_id empêche les imports en double lorsque le même avis est récupéré de nouveau.
- La synchronisation Trustpilot exige
EXT_TRUSTPILOT_ENABLED, une clé API et un Business Unit ID. Le fournisseur dispose aussi d’un repli d’import CSV pour les exports Trustpilot. - La synchronisation Google Business Profile exige
EXT_GOOGLE_ENABLED, un JSON de compte de service contenantclient_emailetprivate_key, plus Account ID et Location ID. - Le contrôleur cron s’exécute sur
/module/mprcomments/cron?token=EXT_CRON_TOKEN&action=syncet retourne les résultats de synchronisation par source en JSON. - Les avis externes d’entreprise peuvent être affichés sur les pages produit, chargés paresseusement par défaut, et éventuellement comptés dans les badges de note produit lorsque l’agrégation externe est activée.
Pour la sécurité SEO, le moteur de schema utilise les avis produit natifs pour les données structurées Product. Les avis d’entreprise importés peuvent être affichés aux acheteurs, mais les commentaires source les excluent explicitement du balisage d’avis produit sauf si le marchand dispose d’avis produit natifs.
Non, les projets soumis ne sont pas publiés automatiquement par défaut. Dans PrestaShop, le réglage auto_approve vaut par défaut 0, donc les nouveaux projets sont stockés comme en attente et les requêtes de galerie publique utilisent le statut de projet approuvé avant de les afficher.
Le contrôleur de soumission exige une authentification client et un token de sécurité valide avant de créer un projet. Il valide le titre du projet, exige au moins une image uploadée et applique la limite configurée du nombre d’images avant l’enregistrement. Les réglages d’image par défaut sont max_images=20 et max_image_size_mb=5.
Default: auto_approve=0
Submitted project status: pending
Public gallery status filter: approved- Si
auto_approvereste désactivé, le client est redirigé vers My Projects après soumission et le projet attend la modération. - Si
auto_approveest activé, le même flux de soumission enregistre le nouveau projet avec le statutapproved. - La liste admin des projets prend en charge les actions groupées d’approbation, rejet, mise en avant et suppression.
- Le contrôleur public de projet retourne une 404 pour les projets non approuvés sauf si une session de prévisualisation admin est valide.
Pour la plupart des boutiques, laisser l’approbation automatique désactivée est le choix par défaut le plus sûr, car les titres, descriptions et photos soumis par les clients sont vérifiés avant d’apparaître dans la vitrine publique.
Oui, les admins peuvent ajouter des épingles produit aux images de vitrine. Dans PrestaShop, chaque épingle stocke les coordonnées x et y de l’image, un libellé et des ID produit de repli ordonnés, puis résout un produit actif en stock pour l’affichage public du projet.
Le contrôleur admin des épingles ajoute, met à jour, supprime et charge les épingles via AJAX JSON. Les coordonnées doivent être comprises entre 0 et 100 et sont arrondies à deux décimales. Les ID produit de repli sont normalisés, dédupliqués et stockés en JSON, avec le premier ID aussi écrit dans le champ hérité id_product.
Pin fields: id_showcase_image, id_product, product_fallback_ids, x_percent, y_percent, label, position
Resolution order: first active in-stock product, then first active product- La recherche produit admin retourne des produits actifs par nom, référence ou ID produit, limitée à 20 résultats.
- Sur la page publique du projet, les épingles sont enrichies avec l’URL produit, l’image de couverture et le prix formaté.
- L’endpoint AJAX front des épingles peut aussi rendre le template de miniature produit du thème lorsqu’il est disponible.
- Si tous les produits de repli sont inactifs, l’épingle reste positionnée mais ne se résout vers aucun produit.
Cela permet à un marchand de transformer une image de galerie client en lookbook achetable tout en gardant une liste de repli pour les produits en rupture ou désactivés.
Oui, les votes en double du même client sur un projet sont évités. Dans PrestaShop, la table des votes possède une clé unique projet-client, et le modèle met à jour le vote existant au lieu d'insérer une nouvelle ligne.
Oui. Une page projet Customer Showcase hors prévisualisation peut produire du JSON-LD lorsque le contrôleur projet dispose de suffisamment de données pour le construire. Le contrôleur collecte le titre du projet, une méta-description de page résolue, l’URL canonique du projet, de grandes URL d’images de vitrine et le nom de la catégorie, puis le template front imprime le JSON dans un script application/ld+json lorsque project_schema_json n’est pas vide.
{"@context":"https://schema.org","@type":"ImageGallery","name":"Bathroom renovation","description":"Short project summary","url":"https://shop.example/showcase/bathroom-renovation","mainEntityOfPage":"https://shop.example/showcase/bathroom-renovation","image":["https://shop.example/img/showcase/large/photo.jpg"],"about":"Bathrooms"}Le type de schema utilisé par le module est ImageGallery, il décrit donc la galerie du projet client plutôt que de revendiquer un schema séparé de produit, service ou avis.
Le contrôleur ignore volontairement le schema en mode prévisualisation : les pages de prévisualisation reçoivent une valeur project_schema_json vide et le helper de prévisualisation applique une gestion noindex. Sur les pages projet normales, les grandes URL d’image sont construites depuis img/showcase/large/ en utilisant le domaine SSL de la boutique et l’URI de base, afin que les données structurées pointent vers des URL d’image absolues plutôt que vers les fichiers miniatures ou moyens utilisés ailleurs sur la page.
- Source de la description : le JSON-LD utilise la méta-description de page résolue. Il s’agit de la méta-description de projet enregistrée lorsqu’elle existe ; sinon le contrôleur génère une description de vitrine client basée sur le titre. La description de projet nettoyée et tronquée n’est qu’un repli final dans
buildProjectSchema()si la méta-description résolue est encore vide. - Champs optionnels :
imageest inclus uniquement lorsque le projet a des images, etaboutuniquement lorsque le projet a un nom de catégorie. - Sécurité de sortie : le JSON est généré avec
json_encode(..., JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)et se rabat surTools::jsonEncode()si nécessaire, puis Smarty imprime ce JSON préparé sans filtrage dans le script JSON-LD.
Non. Le module implémente uniquement le code Google Customer Reviews côté PrestaShop ; il ne contient aucun code pouvant inscrire, approuver ou rendre une boutique éligible dans Google Merchant Center. Vous devez disposer du programme Google Customer Reviews disponible pour la boutique dans Merchant Center, d’un Merchant ID numérique, et de données de commande acceptées par Google pour l’opt-in de l’enquête.
Ce que le module peut contrôler, c’est l’implémentation front-office une fois ces prérequis remplis : il stocke le Merchant ID, charge l’opt-in d’enquête Google sur la page de confirmation de commande, envoie l’ID commande, l’email client, le pays de livraison, la date de livraison estimée et les valeurs GTIN des produits de la commande, et affiche le badge d’évaluation à la position configurée.
L’envoi des enquêtes, l’approbation du programme, le calcul de la note vendeur et la manière dont les notes apparaissent dans les propriétés Google restent sous le contrôle de Google. Le module peut faire apparaître le code d’opt-in et de badge, mais il ne peut pas approuver la boutique ni forcer Google à afficher des notes.
À l’installation, le module démarre désactivé avec un MERCHANT_ID vide, une position de badge par défaut BOTTOM_RIGHT et une langue de badge en. Le garde front-office exige à la fois ENABLED et un Merchant ID non vide, donc un module installé mais non configuré ne sortira pas le code d’opt-in ou de badge.
- Opt-in de confirmation de commande : le hook ne s’exécute que pour une commande chargée, utilise l’email du client de la commande, lit le pays de livraison depuis l’adresse de livraison, utilise une date de livraison estimée simple de sept jours après aujourd’hui, et passe le
ean13de chaque produit commandé comme valeur GTIN. - Badge : le hook de fermeture du body affiche le badge d’évaluation Google avec l’ID marchand configuré et l’une des positions prises en charge, comme
BOTTOM_RIGHT,BOTTOM_LEFTouINLINE. - Limite : si les produits n’ont pas de valeur EAN13, le module envoie quand même l’entrée produit avec un GTIN vide ; c’est hors de PrestaShop que Google décide s’il accepte ou utilise ces données produit.
Pas automatiquement. Le module fournit un aperçu et un historique, mais la source ne contient pas de rollback en un clic restaurant chaque produit à son prix précédent. Avant d’appliquer une mise à jour de masse, utilisez l’aperçu pour inspecter les ID produit affectés, le prix actuel, le nouveau prix calculé et la différence.
- Avant l’application : exportez ou sauvegardez les ID produit affectés et le champ de prix que vous modifiez, surtout si vous mettez à jour un périmètre large comme tous les produits, une catégorie ou un fabricant.
- Après l’application : le module écrit une entrée de log avec la formule, le périmètre, le champ de prix, le nombre affecté, l’employé et la date.
- Si vous devez annuler : utilisez le log pour identifier l’exécution, puis restaurez depuis votre sauvegarde/export. Appliquer la formule inverse peut être risqué, car l’arrondi, les modifications de prix ultérieures et les changements de périmètre produit peuvent rendre le calcul inverse différent des valeurs d’origine.
Pour les changements à haut risque, lancez l’aperçu, exportez le même ensemble de produits, et appliquez la mise à jour pendant une période calme afin que toute correction puisse être faite à partir de valeurs source connues.
L’aperçu et la vraie mise à jour utilisent le même helper de calcul, donc les nombres prévisualisés reposent sur les mêmes actions de formule qui seront ensuite appliquées : increase_percent, decrease_percent, increase_fixed et decrease_fixed. Les diminutions en pourcentage et fixes sont bornées à zéro, et les prix calculés sont arrondis à six décimales avant écriture.
increase_percent:10 => current price * 1.10; decrease_fixed:5 => max(0, current price - 5)Lors de l’application, le module met à jour à la fois product et product_shop pour le champ sélectionné, et ne prend en charge que price ou wholesale_price. Le sélecteur de périmètre peut cibler tous les produits actifs ou les produits actifs d’une catégorie, d’un fabricant ou d’un fournisseur sélectionné ; les produits inactifs ne sont pas sélectionnés par les requêtes de périmètre.
Le hook autorise les URLs contenant module/mprpasswordprotect ou module-mprpasswordprotect, et il s'arrête aussi lorsque le paramètre module de la requête correspond au nom du module.
La classe de configuration expose l'activation de la protection par mot de passe, le mot de passe, le message, le bypass employé/maintenance et les interrupteurs noindex via le formulaire OptionsManager.
Oui. L'installation crée une page meta non configurable pour module-mprpasswordprotect-gate avec le titre Password Required et l'URL rewrite password.
Le contrôleur gate définit un flag d'erreur et réaffiche le même template de mot de passe, qui montre le message traduit Incorrect password. Please try again..
Non. Le contrôleur de renvoi envoie l'email de confirmation de commande reconstruit et enregistre un message privé, mais il n'appelle aucune logique de changement de statut de commande.
Avant l’envoi, le contrôleur AJAX exige un ID commande et un token de module, valide les deux, charge la commande et le client, puis appelle le Mail::Send() standard de PrestaShop avec le template order_conf depuis _PS_MAIL_DIR_ et l’ID boutique original de la commande.
- Produits : il reconstruit les lignes produit HTML et texte brut depuis
$order->getProducts(), avec le nom produit, la référence optionnelle, la quantité, le prix unitaire TTC et le prix total TTC. - Adresses : les blocs livraison et facturation sont générés avec
AddressFormat::generateAddress(), avec un repli assemblé depuis la société, le nom, la rue, le code postal et la ville si le formatage d’adresse échoue. - Piste d’audit : après un renvoi réussi, il ajoute un message privé à la commande et écrit une entrée de log PrestaShop ; si l’envoi mail échoue, il retourne une erreur JSON plutôt que de changer le statut de la commande.
Le module envoie le template standard PrestaShop order_conf via Mail::Send, après reconstruction des lignes produit, adresses, totaux, transporteur et valeurs de paiement depuis la commande.
Après un envoi réussi, le module crée un message privé de commande indiquant que la confirmation a été renvoyée, avec l'email destinataire et l'horodatage.
Le module doit être activé et PHONE_NUMBER doit être renseigné. Son validateur de configuration obligatoire attend uniquement des chiffres et un signe plus initial optionnel, par exemple +1234567890.
Oui. Le trait de chat partagé prend en charge les filtres de page all, product, category et checkout via le réglage PAGES.
Non. Le template rendu crée un lien normal vers Signal et utilise le CSS local du module ainsi qu'un SVG inline pour le bouton. Aucun chargeur JavaScript Signal externe n'est présent dans le template du hook.
Si DELAY est supérieur à zéro, le template masque d'abord le widget et utilise un timeout pour l'afficher après le nombre de secondes configuré.
Le module stocke le choix d’affichage du visiteur dans le cookie léger mpr_tax_display et, tôt dans le contrôleur front, prépare le cache d’affichage des prix par groupe de PrestaShop afin que les calculs de prix produit rendent les prix TTC ou HT pour cette requête. Il ne met pas à jour les paniers, commandes, règles fiscales, factures ou groupes clients en base de données.
Sur les pages produit/listing, il injecte aussi des données cachées .mpr-tax-prices avec les prix TTC et HT préformatés, afin que JavaScript puisse remplacer immédiatement les prix visibles. Si une page ne contient pas de données de prix produit injectées, comme certaines pages panier ou checkout, le script enregistre la préférence et recharge afin que PrestaShop rende la page avec le mode d’affichage choisi.
Le total checkout et le montant de taxe restent calculés par PrestaShop à partir du panier, de l’adresse, des règles fiscales et du flux checkout normal. Ce module affecte la préférence d’affichage et les libellés de prix, pas le calcul fiscal.
Activez le module pour afficher un bouton fixe de retour en haut sur le front-office PrestaShop. Le code sort le bouton depuis les hooks de footer/fermeture du body, évite le rendu en double lorsque les deux hooks sont disponibles, et inclut le CSS et le JavaScript nécessaires au bouton.
Après installation, les valeurs par défaut sont activé, afficher après 300 pixels, style circle et position right. Le module enregistre displayFooter, displayFooterAfter et displayBeforeBodyClosingTag ; le premier hook pris en charge que votre thème rendra affichera le bouton, et les appels de hooks suivants retourneront une chaîne vide car buttonRendered est déjà défini.
Le template crée un seul bouton fixe avec l’ID mprb2t-btn, un label/titre accessible, un SVG inline de flèche vers le haut, et du CSS/JavaScript inline. Il n’y a pas de règle par produit, catégorie ou page dans ce module ; l’activer rend donc le bouton disponible partout où le thème exécute l’un de ces hooks de footer/fermeture du body.
Oui, vous pouvez définir la distance de défilement avant l’apparition du bouton. La configuration PrestaShop stocke une valeur Show After en pixels, et le JavaScript front-office compare ce seuil avec window.pageYOffset avant d’ajouter ou retirer la classe visible du bouton.
Le seuil par défaut est 300 pixels, et le champ admin est enregistré sous SHOW_AFTER. La valeur est assignée à Smarty sous mprb2t_show_after et devient la variable JavaScript threshold dans le template.
if (window.pageYOffset > threshold) { btn.classList.add('mprb2t-visible'); } else { btn.classList.remove('mprb2t-visible'); }L’écouteur de scroll est enregistré comme passif et toggleBtn() s’exécute aussi une fois immédiatement après le chargement du script, afin que l’état du bouton soit correct même lorsqu’un acheteur arrive sur une page avec une ancre ou revient à une position déjà défilée.
Oui, le module prend en charge les options de style présentes dans sa configuration : forme ronde ou carrée et position à gauche ou à droite de l’écran. Le template PrestaShop applique ces valeurs au CSS inline ; le code n’inclut pas de sélecteur de couleur ni de règles de ciblage par page.
Les valeurs installées par défaut sont STYLE=circle et POSITION=right. Dans le template, POSITION=left écrit left: 30px ; toute autre valeur configurée suit la branche droite et écrit right: 30px. Pour la forme, STYLE=circle écrit border-radius: 50%, tandis que l’option carrée utilise un petit rayon de 6px.
- Dimensions fixes : le bouton fait 48 par 48 pixels, est fixé en bas du viewport et utilise
z-index: 9999. - Couleurs intégrées : le template utilise un fond sombre, une icône blanche et un état hover plus sombre. Ces valeurs sont codées en dur dans le template actuel.
- Limite pratique : il n’y a pas de réglage pour le choix de l’icône, la position par appareil, la durée d’animation ou les couleurs personnalisées dans la classe de configuration.
Oui, cliquer sur le bouton fait remonter la page en douceur jusqu’en haut. Le script front-office PrestaShop écoute le clic sur le bouton, empêche l’action par défaut, et appelle window.scrollTo avec top défini à 0 et behavior défini à smooth.
Le gestionnaire de clic est court et direct : il est lié au bouton généré mprb2t-btn, appelle e.preventDefault(), puis demande au navigateur de défiler vers le haut avec le défilement fluide natif.
window.scrollTo({ top: 0, behavior: 'smooth' });Comme le module utilise le comportement natif scrollTo du navigateur plutôt qu’une boucle d’animation personnalisée, il reste léger et ne stocke aucun état de scroll. Le bouton ne devient visible qu’après le seuil configuré ; cliquer dessus ne recharge pas la page et ne change pas l’URL.
Utilisez MPR Compare pour ajouter une liste de comparaison côté client à PrestaShop. Les ID produit sélectionnés sont stockés dans le localStorage du navigateur sous la clé mprcompare, tandis que le module interroge les détails produit par AJAX uniquement lorsque la page de comparaison ou les miniatures flottantes ont besoin de données.
Le commentaire d’en-tête du module décrit la conception comme zéro stockage en base de données et zéro cookie pour l’interaction sur les pages de listing. Les hooks de liste produit et de page produit sortent des boutons statiques avec un attribut data-id-product ; le script navigateur ajoute ou retire ces ID de localStorage et met à jour localement l’état des boutons, compteurs et barre flottante.
Le serveur n’intervient que lorsque de vraies données produit sont nécessaires. La page de comparaison lit les ID depuis localStorage et les poste au contrôleur front actions avec action=getProducts, tandis que les miniatures flottantes appellent action=getProductImage. Vider la liste de comparaison enregistre simplement un tableau vide dans localStorage.
Le tableau de comparaison peut afficher le nom du produit, l’URL, l’image de couverture, le prix actuel, l’ancien prix, la description courte, la référence, le fabricant, le poids, l’état du stock, les caractéristiques, l’état et l’EAN13 lorsque ces valeurs existent. Le contrôleur AJAX ignore les produits PrestaShop inactifs.
Les données viennent d’objets Product chargés dans la langue et la boutique courantes. Les prix sont formatés depuis Product::getPriceStatic() avec taxe activée ; l’ancien prix n’est retourné que lorsque le prix sans réduction est supérieur au prix actuel. Les images de couverture utilisent medium_default pour le tableau de comparaison et cart_default pour l’endpoint de miniature flottante.
- Caractéristiques : le contrôleur appelle
getFrontFeatures()et retourne chaque paire nom/valeur de caractéristique, tandis que le script front regroupe les noms de caractéristiques uniques en lignes de comparaison. - Disponibilité : l’état du stock est retourné depuis
Product::getQuantity($idProduct) > 0, donc c’est un indicateur simple en stock/hors stock. - Données manquantes : les champs optionnels comme fabricant, référence, poids, EAN13 et ancien prix sont vides ou omis dans le tableau lorsque PrestaShop n’a aucune valeur pour eux.
Oui, la taille maximale de comparaison est configurable. Le réglage MAX_ITEMS vaut quatre par défaut à l’installation, le script front refuse d’ajouter plus d’articles une fois la limite atteinte, et l’endpoint produit AJAX découpe les ID entrants selon le même maximum configuré.
À l’installation, MAX_ITEMS est créé avec la valeur 4 ; le contrôleur admin l’enregistre avec un minimum de 1. Cette valeur est envoyée au navigateur dans mprCompareConfig.maxItems et également assignée au template de page de comparaison sous maxItems.
var max = config.maxItems || 4;L’application des doublons est également côté client : si le produit est déjà dans localStorage, la fonction d’ajout retourne sans l’ajouter de nouveau. L’endpoint AJAX découpe quand même la liste d’ID demandée au maximum configuré, donc une requête modifiée manuellement ne peut pas faire charger plus de produits que la limite configurée sur la page de comparaison.
Oui, il ajoute des contrôles de comparaison via des hooks PrestaShop. Le module affiche des boutons sur les listes de produits et les pages produit, un compteur de navigation, et une barre flottante de comparaison optionnelle avec miniatures produit, contrôles de suppression et lien vers la page de comparaison.
Pour PrestaShop 1.7 et plus récent, le module enregistre les hooks media, page produit, navigation et fermeture du body ; pour les anciens thèmes 1.6, il utilise les hooks hérités header, bouton produit, nav et footer. Les boutons de listing produit sont des liens statiques avec js-mprcompare-toggle, les contrôles de page produit sont des boutons, et les deux utilisent la même valeur data-id-product pour le gestionnaire de liste JavaScript.
La barre flottante est contrôlée par le réglage SHOW_FLOATING, activé par défaut. Quand des produits sont sélectionnés, le script affiche la barre, charge les données de miniature par AJAX si elles ne sont pas déjà en cache, rend les boutons de suppression pour chaque produit, et garde le compteur d’en-tête et le compteur flottant synchronisés avec le nombre d’ID dans localStorage.
Les clients peuvent soumettre des demandes de fonctionnalités depuis l’onglet de page produit lorsque le module et l’affichage produit sont activés. Dans PrestaShop, le contrôleur AJAX valide le token, le produit, le titre, la description et les champs d’identité invité, puis limite les soumissions par produit et par IP.
L’onglet produit est ajouté uniquement lorsque ENABLED et SHOW_ON_PRODUCT sont activés et que le module peut résoudre l’ID produit. L’onglet commence comme une liste résumé/lazy, puis le script front demande la première page d’éléments lorsque l’onglet devient visible, en utilisant la valeur configurée REQUESTS_PER_PAGE, qui vaut 10 par défaut.
- Sécurité : les actions d’écriture exigent un token CSRF depuis
Tools::getToken(false). Le JavaScript récupère un token avecaction=getTokensi le balisage initial de l’onglet n’en contient pas déjà un. - Validation : le titre doit faire au moins 5 caractères, la description au moins 10 caractères, les invités doivent fournir un nom et un email valide, et les clients connectés utilisent automatiquement le nom et l’email de leur compte.
- Limite de fréquence : le contrôleur autorise au plus 3 soumissions pour le même produit et la même adresse IP pendant la journée précédente.
- Données stockées : la demande enregistre le produit, l’identité client ou invité, le texte de description nettoyé, la boutique, la langue, l’adresse IP, le statut, les horodatages et un nombre initial de votes de 1.
Oui, les demandes peuvent exiger une connexion client et une approbation admin. Dans PrestaShop, REQUIRE_LOGIN bloque les soumissions invitées, REQUIRE_APPROVAL stocke les nouvelles demandes comme submitted, et les listes publiques masquent les éléments submitted aux non-soumissionnaires jusqu’à ce qu’ils passent à un statut public.
Les valeurs par défaut sont adaptées aux marchands : REQUIRE_LOGIN est désactivé, mais REQUIRE_APPROVAL est activé. Avec l’approbation activée, le contrôleur enregistre les nouveaux éléments en submitted ; sans elle, les nouveaux éléments démarrent en under_review.
La visibilité est gérée dans le modèle, pas seulement dans le template. Les listes produit normales excluent les éléments declined et submitted, puis rajoutent les éléments submitted uniquement lorsque le visiteur actuel correspond au soumissionnaire par ID client ou adresse IP. La requête de roadmap publique indexable exclut aussi submitted et declined, donc les idées en attente ne deviennent pas du contenu SEO public.
Pour le soumissionnaire, le JavaScript peut afficher un avis d’attente : Your request is pending review and only visible to you. Cela rend le workflow d’approbation clair sans exposer les demandes non vérifiées aux autres acheteurs.
Oui, le vote peut être activé et le vote invité peut être autorisé ou bloqué. Dans PrestaShop, l’endpoint de vote bascule un vote par demande, utilise l’ID client ou un suivi basé sur l’IP, et retourne une exigence de connexion lorsque le vote invité est désactivé.
Le vote est activé par défaut, tandis que le vote invité est désactivé par défaut. Lorsque le vote invité est désactivé et que le visiteur n’est pas connecté, la réponse AJAX inclut require_login, et le script front redirige vers le lien de connexion lorsqu’il existe.
Le stockage des votes est une table séparée mprfeaturerequest_vote. Les votants connectés sont associés par id_customer ; les invités, lorsqu’ils sont autorisés, sont associés par adresse IP. Appeler l’endpoint à nouveau retire le vote en supprimant la ligne existante, tandis qu’un nouveau vote insère une ligne et marque l’état voted retourné comme true.
Après chaque bascule, le module recalcule le compteur de la demande en incrémentant ou décrémentant vote_count avec une mise à jour base de données qui utilise GREATEST(0, ...), afin que le nombre affiché ne puisse pas passer sous zéro. Les demandes nouvellement soumises reçoivent aussi un vote automatique de leur auteur, ce qui explique le compteur initial à 1.
Oui, le hub principal de la roadmap peut être indexable lorsque le module Feature Requests est activé, que la page roadmap est activée et que le réglage INDEX_ROADMAP_PAGE autorise l’indexation. Les pages de détail, les pages roadmap propres à un produit et les endpoints AJAX sont volontairement exclus de l’index.
- URL propre du hub roadmap, par exemple
/feature-requests: le type de pageroadmaputilise la politique SEO du module. Lorsque l’indexation est activée, robots se résout enindex, follow. - Hub roadmap avec paramètres de filtre/tri pris en charge, par exemple
/feature-requests?status=planned: le contrôleur redirige ceux-ci en 301 (status,sort,view,search,page) vers le hub canonique/feature-requests, afin que les doublons ne soient jamais indexés. Toute autre chaîne de requête non redirigée est rendue ennoindex, follow. - Page propre à un produit, par exemple
/feature-requests/module/my-product: le type de pagemoduleest configuré comme non indexable, donc robots se résout ennoindex, follow. - Page de détail d’une demande, par exemple
/feature-requests/some-request: le type de pagedetailest configuré comme non indexable, donc robots se résout ennoindex, follow. Les réponses 404 des pages de détail envoient aussiX-Robots-Tag: noindex, nofollow, noarchive. - Endpoint AJAX, par exemple
module/mprfeaturerequest/ajax: le contrôleur envoieX-Robots-Tag: noindex, nofollow, noarchive.
Le hook de sitemap suit la même logique : il n’ajoute l’URL du hub roadmap que lorsque le module, l’affichage de la roadmap, l’inclusion dans le sitemap et la politique SEO l’autorisent tous.
Le chemin de code se limite au rendu du widget JivoChat depuis displayBeforeBodyClosingTag. Il vérifie que le module est activé, qu’un WIDGET_ID existe, que la page actuelle correspond au filtre de page configuré, et que l’affichage mobile est autorisé lorsque le visiteur est sur mobile.
Lorsqu’il s’affiche, le template injecte le script externe JivoChat depuis //code.jivosite.com/widget/{widget_id}, éventuellement après le délai configuré. Si PASS_USER_DATA est activé et que le client est connecté, il définit jivo_onLoadCallback() et appelle jivo_api.setContactInfo() avec le nom et l’email du client.
Il n’y a aucune table, aucun modèle ni contrôleur de module pour les messages ou transcriptions de chat dans cette source. Supprimer ou désactiver le module PrestaShop arrête l’intégration du widget, mais n’exporte, ne supprime ni ne gère l’historique des conversations détenu par JivoChat.
hookPaymentOptions() affiche Pay by Invoice uniquement lorsque tous les contrôles d’éligibilité réussissent. Le module doit être actif, le réglage du module doit être activé, le panier doit appartenir à un client connecté, et l’objet client doit se charger correctement.
- Contrôle client : les paniers invités et les enregistrements client invalides ne retournent aucune option de paiement.
- Contrôle groupe : le client doit appartenir à au moins un groupe assigné à une condition de paiement active.
- Contrôle condition : seules les conditions actives liées via
mpr_payment_term_groupsont retournées, triées par position et jours. - Contrôle crédit : le module prend la limite de crédit la plus élevée parmi les groupes du client ;
0signifie illimité. Sinon, les commandes différées impayées plus le total du panier courant doivent rester dans la limite. - Contrôle validation : le contrôleur de validation front répète le contrôle de condition et de crédit avant de créer la commande, donc une option de checkout périmée ne peut pas contourner les règles.
Si un contrôle échoue, le module retourne une liste vide d’options de paiement et PrestaShop ne propose tout simplement pas Pay by Invoice pour ce panier.
Les conditions disponibles sont calculées depuis les groupes client du panier courant. Le service interroge les conditions actives jointes via mpr_payment_term_group, utilise la langue courante pour le nom et la description de la condition, et trie le résultat par position puis days. Les conditions par défaut créées à l’installation incluent Due on Receipt plus Net 15, Net 30, Net 60 et Net 90.
Le template de checkout affiche ensuite chaque condition disponible comme option radio, avec la première sélectionnée, son badge couleur, le texte des jours d’échéance et la description optionnelle. Si la limite de crédit n’est pas illimitée, il affiche aussi le crédit disponible et le montant différé restant dû avant la liste des conditions.
Lorsque le client soumet l’option de paiement, le contrôleur de validation lit le mpr_pt_term_id sélectionné, recalcule le total du panier, appelle à nouveau canPlaceDeferredOrder(), crée la commande PrestaShop dans l’état configuré OS_AWAITING, avec repli vers bankwire s’il manque, puis crée un enregistrement mpr_deferred_order avec le montant, le client, la boutique et la date d’échéance basée sur les jours de la condition sélectionnée.
La date d’échéance est calculée en ajoutant le nombre de jours de la condition sélectionnée à la date de création de la commande différée. Les conditions installées par défaut incluent Due on Receipt / Net 0, Net 15, Net 30, Net 60 et Net 90.
- Si la commande est créée le
2026-06-17avec Net 0, la date d’échéance est2026-06-17. - Si la commande est créée le
2026-06-17avec Net 15, la date d’échéance est2026-07-02. - Si la commande est créée le
2026-06-17avec Net 30, la date d’échéance est2026-07-17.
Le module stocke le résultat comme une date au format Y-m-d, pas comme un horodatage avec heure de la journée. Le calcul utilise la date d’exécution actuelle du serveur/de la boutique PHP lorsque la commande différée est créée, donc les commandes passées près de minuit suivent la limite de date côté serveur plutôt que l’horloge locale du client. Les changements d’heure d’été n’ajoutent pas une heure à la date d’échéance stockée, mais ils peuvent compter indirectement si la commande est créée autour d’une limite de date.
Au checkout, le client sélectionne une condition de paiement via mpr_pt_term_id. Le module valide que la condition est active, appartient à l’un des groupes du client et respecte la limite de crédit effective du client avant de créer la commande PrestaShop. Ce n’est qu’après la validation de la commande qu’il crée l’enregistrement de paiement différé avec la condition sélectionnée, le total TTC de la commande et la date d’échéance calculée.
$dueDate = date('Y-m-d', strtotime('+' . (int) $term->days . ' days'));La valeur stockée est copiée dans mpr_deferred_order.due_date au moment de la commande. Modifier plus tard le nombre de jours d’une condition de paiement ne recalcule pas les dates d’échéance des commandes déjà existantes. Les contrôles d’impayé comparent la date d’échéance stockée avec la date serveur courante ; une facture impayée due aujourd’hui est donc encore due aujourd’hui, et ne devient en retard qu’après cette date.
La valeur de limite de crédit est par groupe client, pas par client individuel. Le module stocke les limites dans mpr_pt_credit_limit, où id_group est la clé primaire, et les conditions de paiement elles-mêmes sont aussi assignées aux groupes via mpr_payment_term_group.
Pour un client appartenant à plusieurs groupes, le service récupère tous ses groupes et utilise MAX(credit_limit) parmi eux. Exemple : si Ana appartient à Retail sans limite configurée, B2B Silver avec 1000.00, et B2B Gold avec 2500.00, sa limite de crédit effective est 2500.00.
Une limite configurée à 0 est traitée comme illimitée par le service de checkout. Lorsqu’une vraie limite existe, le module soustrait les commandes différées impayées de ce client dans la boutique courante et n’affiche les conditions Pay by Invoice que lorsque outstanding + cart total reste dans la limite effective du groupe.
Les limites de crédit et la disponibilité des conditions sont liées mais séparées. Assigner une limite à un groupe ne rend pas toutes les conditions de paiement disponibles à elle seule ; la condition doit aussi être active et assignée à au moins l’un des groupes du client. De même, assigner une condition à un groupe sans vraie limite de crédit signifie que le groupe peut utiliser la condition tant que la limite effective se résout comme illimitée ou qu’un autre groupe fournit une limite suffisante.
Le montant restant dû est calculé depuis les lignes impayées dans mpr_deferred_order pour le même client et la boutique courante. Les lignes déjà marquées payées sont exclues, et le total du panier utilisé pour la nouvelle commande est le total TTC de la commande. Si le client dépasse la limite effective, le service de checkout retire toutes les conditions différées des options de paiement disponibles et le contrôleur de validation rejette un paiement différé soumis même si quelqu’un poste la condition manuellement.
L’installation crée un état de commande nommé Awaiting Deferred Payment, stocke son ID dans OS_AWAITING, et le contrôleur de validation utilise cet état lorsqu’il appelle validateOrder() pour les commandes Pay by Invoice. Si l’état stocké manque, le contrôleur se rabat sur l’état bank-wire de PrestaShop.
logable = truesignifie que PrestaShop traite la commande comme une commande valide passée pour les flux d’historique de commande et de statistiques, même si le paiement est encore en attente.invoice = trueetpdf_invoice = truesignifient que la génération de facture est activée pour l’état de commande différée.paid = falsesignifie que l’état de commande ne marque pas la commande comme payée ; le module suit le règlement séparément dansmpr_deferred_order.is_paid.
Lorsque l’enregistrement différé est créé, is_paid commence à 0. La méthode markAsPaid() du modèle de commande différée définit plus tard is_paid à 1 et enregistre paid_date, sans changer la signification de l’état initial de la commande.
L’état installé appartient au module, utilise le libellé Awaiting Deferred Payment dans toutes les langues, et est créé avec send_email = false, unremovable = false, et une valeur de couleur bleue. La page de retour paiement peut ensuite afficher la condition de paiement sélectionnée, le montant dû et la date d’échéance pendant que la commande reste impayée du point de vue de l’état de paiement PrestaShop.
Il y a un suivi back-office important : lorsqu’un admin marque une commande différée comme payée via le contrôleur des commandes différées du module, le module met d’abord à jour mpr_deferred_order. Si la commande PrestaShop liée est encore dans l’état d’attente du module et que l’état payé standard PS_OS_PAYMENT existe, il déplace aussi la commande PrestaShop vers cet état payé. Si la commande a déjà été déplacée vers un autre état, le module ne l’écrase pas aveuglément.
Une notification réelle est construite à partir de commandes PrestaShop valides dans la boutique courante, limitée par l'âge maximal de commande configuré et les règles d'inclusion ou d'exclusion produit. Elle utilise le produit commandé, la ville de livraison et le prénom masqué.
Non. Les notifications de vente générées ne sont pas de vraies commandes PrestaShop et ne sont pas écrites dans la table des commandes. Le module a trois modes de notification :
- Commandes réelles uniquement : affiche les commandes valides récentes de PrestaShop, avec noms de clients masqués, ville, données produit, image produit, prix et temps relatif.
- Générées uniquement : construit des notifications d’apparence réaliste à partir de produits actifs du catalogue plus des listes de noms et villes configurées ou intégrées. Ce sont des messages d’affichage, pas des commandes.
- Mixte : utilise d’abord les notifications de commandes réelles et complète les emplacements restants avec des notifications générées lorsqu’il n’y a pas assez de commandes réelles récentes.
Le mode d’installation par défaut est mixed. En mode mixte, si les notifications réelles sont moins nombreuses que le nombre demandé, le code génère automatiquement des compléments ; il n’y a pas d’interrupteur séparé de remplissage généré dans le mode mixte. Si chaque notification doit correspondre à un achat réel, passez le module en mode Real orders only et assurez-vous que l’âge maximal des commandes et les filtres produit sont assez larges pour retourner des commandes récentes.
Les notifications réelles sont chargées depuis les commandes PrestaShop valides de la boutique courante, limitées par l’âge maximal configuré des commandes. L’âge maximal par défaut est de 72 heures. Les listes d’inclusion et d’exclusion de produits sont appliquées avant le retour de la notification, et le nom client affiché est masqué au lieu de montrer le prénom complet.
Les notifications générées sont construites depuis des produits actifs du catalogue. Le module sélectionne les données produit, calcule un prix d’affichage, essaie d’utiliser l’image de couverture du produit, choisit un nom et une ville depuis ses listes, et crée un temps relatif comme un nombre récent de minutes. Cela se produit au moment de l’affichage via l’endpoint de notifications front-office ; cela ne crée pas de paniers, commandes, clients, détails de commande, paiements ou lignes d’historique de commande.
Le toast front-end étiquette les notifications comme Verified Purchase dans le template d’affichage, y compris les notifications générées. Ce libellé fait partie de la présentation du pop-up, pas une preuve qu’une notification générée provient d’une vraie commande. Pour les boutiques à conformité stricte ou sensibles à l’audit, utilisez le mode Real orders only.
Oui. La configuration accepte des listes d'IDs produit à inclure et à exclure, séparées par des virgules. Ces filtres s'appliquent à la sélection des lignes de commandes réelles comme à la sélection des produits pour les notifications générées.
Le front controller notifications renvoie du JSON avec un header de réponse noindex lorsque le module est activé. Le script navigateur récupère ce flux et rend les notifications toast selon les réglages de timing.
Non, le module crée le point d’entrée front-office vers Telegram. Après le clic de l’acheteur, Telegram gère la conversation dans l’application Telegram ou l’expérience web. Cela garde le module simple et évite de créer une deuxième boîte de réception de messages dans PrestaShop.
Le widget affiche un lien Telegram fixe en utilisant le nom d’utilisateur configuré. Si un message prérempli optionnel est configuré, le module l’ajoute à l’URL https://t.me/... et remplace {url} par l’URL de la page courante avant d’envoyer l’acheteur vers Telegram. Le navigateur ouvre Telegram dans un nouvel onglet ou dans le contexte de l’application ; le chat lui-même n’est pas intégré dans la page PrestaShop.
Le module ne stocke pas les messages Telegram entrants, ne crée pas de fils de service client PrestaShop, et n’exécute pas de webhook Telegram ni de boîte bot dans le back-office. L’historique des conversations, les réponses, les pièces jointes et les notifications restent dans Telegram.
L’affichage est contrôlé par les réglages du module. Le widget ne s’affiche que lorsque le module est activé et qu’un nom d’utilisateur Telegram valide est présent. Vous pouvez aussi contrôler la position front-office, le style icône ou barre, le texte d’appel à l’action, la couleur, la taille, la marge, l’infobulle, l’animation, le délai d’affichage, la visibilité mobile et le périmètre de pages comme toutes les pages, les pages produit, les pages catégorie ou les pages checkout.
Oui, Weekly Flash Sale peut publier automatiquement, mais uniquement via des modules de publication compatibles. La tâche cherche mprinstagramintegration avec publishToInstagram(), mprfacebookpostsintegration avec publishToFacebook(), et mprxintegration avec publishToX(). Elle construit chaque légende à partir des templates Instagram, Facebook et X en utilisant des placeholders comme {product_name}, {original_price}, {sale_price}, {discount}, {code} et {product_url}.
ok:...signifie que le publisher a retourné un résultat de plateforme, donc l’envoi a été traité comme réussi.skippedsignifie que le module de plateforme est manquant ou inactif, que la méthode de publication requise manque, ou que la légende de cette plateforme est vide.FAILsignifie que la méthode de publication a retourné false.FAIL:messagesignifie que le publisher a lancé une exception, et le message après le préfixe est enregistré pour diagnostic.dry-runest un statut global d’exécution de test. La tâche retourne avant de créer la règle panier, de publier ou d’écrire l’historique de vente.disabledest retourné lorsque la vente hebdomadaire est désactivée et que l’exécution n’est pas un dry run.
Pour les exécutions réelles, les résultats par plateforme sont stockés dans mprweeklysale_history sous ig_result, fb_result et x_result, avec le produit, la remise, le code généré et les dates de vente.
La publication automatique fait partie de la tâche de flash sale. Une vraie exécution choisit d’abord un produit actif qui n’a pas été utilisé récemment selon la fenêtre d’historique configurée, crée une règle panier pour la remise, puis appelle les modules de publication sociale disponibles. La configuration par défaut utilise une remise de 50 %, une durée de 24 heures, le préfixe de code FLASH, une fenêtre d’historique de 12 semaines, et un planning hebdomadaire le mercredi à 08:00.
La règle panier générée est spécifique au produit, active, mise en avant, limitée à une quantité 1000 et à une quantité par utilisateur 1. Les légendes sont construites après la préparation du prix soldé, du code de remise, de l’URL produit et de l’image produit. La légende X est raccourcie pour respecter la limite de la plateforme, et la légende Instagram est aussi plafonnée avant publication.
La publication automatique exige donc plus que l’activation de Weekly Flash Sale. Le module d’intégration correspondant doit être installé, actif et exposer la méthode de publication attendue, et la tâche cron planifiée doit s’exécuter avec le bon token. Si un module de plateforme manque, la vente peut quand même être créée et la plateforme manquante est enregistrée comme skipped.
Utilisez le slider de page d’accueil du module pour afficher un carrousel hero sur le hook displayHome de PrestaShop. Le code résout le slider par défaut via l’identifiant homepage, charge ses bannières actives, joint les champs texte de la langue/boutique courante lorsqu’ils existent, et sort le carrousel uniquement lorsque des images exploitables existent.
À l’installation, le module initialise un slider actif avec l’identifiant homepage. Pour afficher un hero sur la page d’accueil, créez ou modifiez des bannières pour ce slider, uploadez au moins une image valide, gardez la bannière active, et assurez-vous que le module reste accroché à displayHome. Le hook appelle le même renderer de widget avec slider = homepage, donc la sortie de page d’accueil suit les mêmes règles que les widgets intégrés.
La requête du carrousel charge les bannières actives assignées au slider sélectionné et les trie par position puis par ID bannière. La ligne langue/boutique est jointe avec un LEFT JOIN, donc le titre, le sous-titre et le texte CTA sont pris depuis la langue et la boutique courantes lorsque cette ligne existe, mais une bannière n’est pas rejetée simplement parce que la ligne texte langue/boutique manque. Une bannière image seule non traduite peut donc quand même s’afficher.
Si aucune bannière active n’a de fichier image desktop ou mobile existant, le module retourne une chaîne vide au lieu d’afficher une zone hero cassée.
Le comportement d’affichage vient de la configuration du module. La vitesse par défaut est 5000 millisecondes, l’autoplay est activé, les contrôles et indicateurs sont activés, la transition est slide, le style Ken Burns est activé, et la hauteur par défaut est 500. Le template donne aussi au premier slide un chargement eager et une priorité de récupération, tandis que les slides suivants sont chargés en lazy pour réduire le poids initial de la page.
Oui, chaque bannière peut stocker une image desktop et une image mobile optionnelle pour PrestaShop. Le template du carrousel sort des sources picture responsives, utilise l’image mobile sur les petits écrans, et ajoute des sources AVIF ou WebP lorsque des fichiers correspondants existent à côté des images configurées.
L’image mobile est destinée aux écrans étroits et est émise avec une condition media max-width: 767px. L’image desktop reste l’image de repli normale du slide, il est donc préférable d’uploader une image desktop pour chaque bannière et d’ajouter une image mobile lorsque le recadrage doit changer sur téléphone.
Le module ne convertit pas les images pendant le rendu. Il vérifie si des fichiers voisins avec le même nom de base et des extensions .avif ou .webp existent déjà, puis ajoute ces sources lorsqu’elles sont présentes. Si ces fichiers optimisés ne sont pas sur disque, le carrousel se rabat sur les chemins d’image originaux uploadés.
Une bannière sans fichier image desktop ni mobile est ignorée avant rendu. Cela empêche les slides vides. Si seule une image mobile existe, la bannière peut quand même passer le contrôle de fichier, mais les visiteurs desktop peuvent ne pas avoir de vraie image desktop de repli ; la configuration marchand doit donc considérer l’image desktop comme base et l’image mobile comme remplacement responsive optionnel.
Oui, le module implémente le rendu de widget PrestaShop pour les sliders en dehors de la page d’accueil. Un template peut appeler le widget avec un slider_id numérique ou avec un identifiant de slider stocké dans la table de sliders du module.
{widget name='mprbannerrevolution' slider_id=2} {widget name='mprbannerrevolution' slider='homepage'} {widget name='mprbannerrevolution' slider='landing-sale'}Si aucun paramètre n’est passé, le module résout le slider par défaut homepage. Le code n’assigne pas automatiquement les sliders aux pages CMS ; il résout le slider depuis les paramètres du widget, puis affiche uniquement les bannières actives de ce slider qui disposent d’une image desktop ou mobile disponible.
La version par identifiant ne fonctionne que pour les sliders actifs, car la recherche utilise le contrôle actif de la table de sliders. Le chemin numérique slider_id charge cet ID exact de slider. Une fois le slider résolu, le même pipeline de rendu que la page d’accueil est utilisé : langue courante, boutique courante, bannières actives, contrôles d’existence de fichiers, sources responsives, réglages de carrousel et template de carrousel partagé.
Un commentaire de code mentionne slider_cms, mais le résolveur implémenté gère slider_id, slider, et le slider homepage par défaut. Pour les pages CMS ou landing pages, utilisez un appel widget explicite dans le contenu de page ou le template du thème au lieu d’attendre que le module associe automatiquement des pages CMS à des sliders.
Vous pouvez configurer le contenu réel de bannière utilisé par le carrousel PrestaShop : titre traduit, sous-titre, texte CTA et URL CTA. Chaque bannière stocke aussi la couleur d’overlay, l’opacité d’overlay, l’alignement du texte, l’état actif, la position, l’image desktop et l’image mobile optionnelle.
Les champs de contenu sont multilingues, donc le titre de bannière, le sous-titre, le texte du bouton et l’URL du bouton peuvent varier selon la langue. Le titre est utilisé comme titre principal du slide, le sous-titre apparaît dessous, et le bouton CTA n’apparaît que lorsque le texte CTA et l’URL CTA sont tous les deux présents pour cette langue.
Les contrôles visuels sont stockés avec la bannière elle-même. La couleur d’overlay est noire par défaut, l’opacité d’overlay est une valeur en pourcentage, et l’alignement du texte prend en charge left, center et right. Le drapeau actif contrôle si la bannière peut apparaître, et la valeur de position contrôle l’ordre dans le slider sélectionné.
Les champs image sont les médias réellement utilisés par le carrousel. L’image desktop est l’image principale du slide, et l’image mobile optionnelle donne un recadrage différent aux téléphones. Le flux d’upload admin accepte les formats web courants comme JPG, PNG, WebP et GIF, tandis que le renderer front-office peut aussi ajouter des sources AVIF ou WebP si des fichiers optimisés correspondants existent sur disque.
Les champs texte vides sont autorisés. Une bannière peut donc servir de slide purement visuel, de hero avec texte sur image, ou de slide promotionnel avec bouton, selon les champs traduits remplis.
Oui, les messages soumis sont stockés dans PrestaShop. Le processeur crée un enregistrement de soumission avec statut, indicateur de spam, adresse IP, user agent, contexte client ou invité, puis stocke chaque valeur de champ soumise dans la table de données de soumission du module.
La ligne principale de soumission est enregistrée dans mprcontactform_submission. Elle inclut l’ID formulaire, l’ID boutique, l’ID client lorsque le visiteur est connecté, le nom client, l’email client, l’adresse IP, le user agent, le statut, l’indicateur spam, la raison spam et la date de création. Les soumissions invitées sont enregistrées avec l’ID client 0.
Les réponses individuelles sont enregistrées séparément dans mprcontactform_submission_data. Chaque ligne stocke l’ID soumission, l’ID champ, le nom du champ et la valeur de champ soumise. Cela permet au module de séparer l’en-tête de soumission des champs dynamiques du formulaire, ce qui compte parce que chaque formulaire peut avoir un ensemble de champs différent.
Le processeur valide le formulaire actif et ses champs actifs avant l’enregistrement. Les champs requis, le format email, le format téléphone, le format URL, les champs numériques, les options select, les validateurs personnalisés et la case GDPR peuvent tous rejeter la soumission avant qu’elle soit enregistrée. Les contrôles anti-spam s’exécutent ensuite ; les soumissions spam sont quand même enregistrées avec is_spam = 1 et une raison, mais les emails admin et client normaux ne sont envoyés que pour les soumissions non spam.
L’adresse IP est prise depuis les en-têtes forwarded lorsqu’ils sont présents, puis depuis l’adresse remote en repli, et le user agent est stocké avec une limite de longueur. Cela crée une piste d’audit pour les demandes sans transformer le module en CRM complet ; le suivi se fait toujours via les destinataires email configurés ou le workflow back-office utilisé par le marchand pour examiner les soumissions.
Oui, les demandes peuvent être routées vers des destinataires admin configurés. Chaque formulaire peut définir des adresses email admin et une ligne d’objet ; le mailer accepte les destinataires séparés par des virgules et se rabat sur l’email global du module ou l’email de la boutique lorsque le destinataire d’un formulaire est vide.
Ce routage est par formulaire, donc un formulaire de contact peut envoyer les demandes commerciales vers une boîte mail, tandis qu’un autre formulaire envoie les demandes support vers une autre boîte. Le formulaire dispose aussi d’un réglage send_admin_email ; si les emails admin sont désactivés pour ce formulaire, la soumission peut quand même être stockée sans envoyer de notification admin.
Le repli du destinataire se fait dans l’ordre. Le mailer utilise d’abord la liste d’emails admin du formulaire, puis le réglage email admin de niveau module, puis PS_SHOP_EMAIL. Plusieurs destinataires peuvent être saisis sous forme de liste séparée par des virgules. Les adresses email invalides sont ignorées plutôt qu’utilisées pour l’envoi.
L’objet admin vient de l’objet email traduit du formulaire lorsqu’il est défini, sinon il se rabat sur un objet générique de nouvelle soumission. Le nom de la boutique est ajouté, et l’email client soumis est utilisé comme adresse reply-to lorsqu’il est disponible, afin que répondre depuis la boîte mail puisse revenir au client.
La confirmation client est séparée. Si send_customer_email est activé et que la soumission inclut une adresse email client, le module peut aussi envoyer un message de confirmation au visiteur. Les soumissions spam sont enregistrées pour examen, mais le mailer n’est pas appelé pour elles ; le spam n’est donc normalement pas transféré aux destinataires admin ou aux clients.
Oui. Le module vérifie les soumissions avant d’envoyer les emails, marque le spam détecté dans l’enregistrement de soumission et stocke une raison de spam. La source inclut ces déclencheurs anti-spam :
- Honeypot : le champ caché
website_url_confirmdoit rester vide. - Timing de soumission : l’horodatage caché
_mpr_ftdoit être présent, valide et plus ancien que lemin_submit_timeconfiguré du formulaire. - Limite de fréquence : l’IP de l’expéditeur est bloquée lorsqu’elle a déjà atteint le maximum de soumissions par heure du formulaire.
- IP bloquées : l’IP de l’expéditeur est comparée à la liste d’IP bloquées du formulaire, séparée par retours à la ligne.
- Mots bloqués : chaque champ soumis est vérifié par rapport aux mots bloqués configurés avec une recherche de sous-chaîne insensible à la casse.
Par défaut, les formulaires fraîchement installés activent le honeypot et le contrôle de timing avec un temps minimum de soumission de 3 secondes. Les soumissions spam sont enregistrées pour examen, mais le flux normal d’emails admin/client ne s’exécute que pour les soumissions non spam.
La limite de fréquence par défaut au niveau du module est de 10 soumissions par IP par heure. Définir le maximum de soumissions par IP par heure à 0 désactive ce contrôle de limite. La requête de limite compte les soumissions enregistrées depuis la même adresse IP dans l’heure précédente, donc les tentatives répétées peuvent être bloquées même si le visiteur renvoie le même formulaire.
Le contrôle de timing est conçu pour détecter les posts automatisés qui soumettent immédiatement ou omettent l’horodatage caché. Un vrai visiteur reçoit le champ caché _mpr_ft avec le formulaire, tandis qu’un bot qui poste directement sans charger la page échouera généralement à l’exigence d’horodatage.
Les raisons de spam sont stockées comme libellés lisibles par machine tels que honeypot, timing, rate_limit, blocked_ip et blocked_words. Plusieurs raisons peuvent être enregistrées sur la même soumission, ce qui aide à distinguer un simple envoi trop rapide d’un message qui contient aussi des mots bloqués.
Oui, il peut remplacer la page de contact PrestaShop par défaut lorsque ce réglage est activé. Le module ajoute des routes de contact et utilise le hook dispatcher pour rediriger le contrôleur contact cœur vers son propre rendu de page contact, tout en gardant les liens d’affichage normaux du module disponibles.
Le réglage est désactivé par défaut. Lorsque replace_core_contact est activé, le module expose des routes de contact via hookModuleRoutes, en utilisant la réécriture de page contact de la boutique lorsque possible, et il gère aussi le contrôleur cœur contact via le hook dispatcher.
En termes d’implémentation, le hook dispatcher n’envoie pas de redirection navigateur 301 ou 302. Il réécrit sur place les paramètres de la requête courante en changeant le contrôleur vers le contrôleur display du module et en définissant le nom du module à mprcontactform. L’acheteur reste dans le flux de contact, mais PrestaShop rend la page contact du module au lieu du contrôleur contact cœur.
Le module peut aussi rendre les formulaires via sa propre route d’affichage de module et via des hooks comme displayMprContactForm et displayContactContent. Cela signifie que les marchands peuvent remplacer la page de contact principale, intégrer un formulaire spécifique ailleurs, ou garder la page de contact cœur inchangée et utiliser uniquement les liens du module.
Si le remplacement n’est pas activé, le hook de route ne retourne aucune route de remplacement de contact et la page de contact cœur reste sous le contrôle normal de PrestaShop. La fonctionnalité est ainsi réversible depuis la configuration sans désinstaller le module.
Le module ajoute une action de suppression sur la page de détail de commande admin PrestaShop. Elle s’affiche via les hooks displayAdminOrderMain et displayAdminOrder lorsque le module est activé et qu’un ID commande est disponible, puis envoie la commande vers le flux de corbeille du module.
Sur une installation standard, le module est activé et la confirmation est requise. La page commande affiche un bloc Delete Order avec un bouton qui pointe vers le contrôleur admin du module en utilisant un paramètre trash_order. Si la confirmation est activée, le template ajoute une invite de confirmation navigateur avant la soumission de l’action.
Lorsque l’admin confirme, le contrôleur transmet l’ID commande et l’ID employé courant au service de corbeille. Le service charge l’Order PrestaShop, crée le snapshot de corbeille, stocke qui l’a supprimée, puis appelle la méthode native de suppression de commande de PrestaShop. Si la commande ne peut pas être chargée comme objet valide, l’action de corbeille retourne false au lieu de supprimer quoi que ce soit.
L’action est destinée aux commandes de test, doublons ou indésirables qu’un marchand choisit volontairement de retirer du back-office. Ce n’est pas un indicateur de masquage doux sur la ligne de commande originale ; après la fin du flux de corbeille, la méthode native de suppression de commande PrestaShop a été appelée et l’enregistrement restant du module n’est que le snapshot de corbeille.
Avant la suppression, le module charge l’Order PrestaShop, crée un résumé JSON compact, insère une ligne dans mprdeleteorders_trash, puis appelle la méthode native de suppression de commande. La table de corbeille est volontairement conservée à la désinstallation par sécurité.
{"id_order":1234,"reference":"ABCDEF123","id_customer":42,"total_paid":149.90,"date_add":"2026-06-17 10:15:00","current_state":2}id_order: l’ID de commande PrestaShop original, également enregistré comme colonne de premier niveau dans la table de corbeille pour le filtrage.reference: la référence de commande, également enregistrée sousorder_reference.id_customer: l’ID client lié à la commande supprimée.total_paid: le total de commande depuistotal_paid_tax_incl.date_add: la date de création originale de la commande.current_state: l’ID d’état de commande au moment de la suppression.deleted_by: l’ID de l’employé back-office qui a cliqué sur l’action de corbeille.date_deleted: le moment où l’enregistrement de corbeille a été créé.
C’est un snapshot d’audit, pas une sauvegarde réversible complète de toutes les tables liées à la commande, facture, message et lignes de commande. Utilisez-le pour identifier ce qui a été supprimé et par qui avant une purge définitive.
La table de corbeille elle-même stocke id_trash, id_order, order_reference, order_data, deleted_by et date_deleted. Le contrôleur de liste peut afficher ces lignes de corbeille afin qu’un admin puisse consulter l’ID de commande original, la référence, l’employé supprimant et la date de suppression.
Le JSON contient volontairement seulement un petit ensemble de valeurs d’en-tête de commande. Il ne stocke pas les produits, détails de commande, adresses, paiements, factures, messages, lignes transporteur, contenu du panier, bons de réduction ou historique des mouvements de stock. Pour cette raison, il doit être traité comme une traçabilité des suppressions, pas comme un package de restauration.
Non, le module ne reconstruit pas une commande PrestaShop supprimée depuis la corbeille. Lorsqu’une commande est déplacée vers la corbeille, il stocke un petit snapshot JSON avec des valeurs comme l’ID commande, la référence, l’ID client, le total payé, la date de création et l’état courant, puis appelle la méthode de suppression de commande de PrestaShop.
La méthode de restauration lit uniquement la ligne de corbeille, confirme qu’elle existe, supprime cette ligne de corbeille et retourne un succès pour cette action de nettoyage. Elle ne recrée pas la ligne de commande originale, les détails de commande, paiements, factures, historique de commande, données panier ou enregistrements liés.
Cette limitation est importante parce que le module ne stocke pas assez de données relationnelles pour effectuer une reconstruction complète et sûre d’une commande. Traitez la corbeille comme un tampon d’audit et de nettoyage, pas comme une sauvegarde complète. Pour une vraie récupération, utilisez une sauvegarde de base de données ou un processus de restauration manuel en dehors de ce module.
L’action de nettoyage définitif de la corbeille est également séparée de la restauration de commande. Retirer une ligne de corbeille retire seulement le snapshot d’audit du module ; cela n’affecte pas une commande PrestaShop déjà supprimée, car les données de commande originales ont déjà été retirées par l’appel de suppression natif.
Pour les boutiques en production, le workflow pratique est d’utiliser le module pour nettoyer les commandes connues de test ou indésirables, de garder des sauvegardes de base de données pour la récupération, et de vérifier la commande avant de la supprimer. Si une commande peut devoir être récupérée avec produits, paiements, factures et historique intacts, ne vous fiez pas à la ligne de corbeille du module comme source de récupération.
Non, le chemin de désinstallation conserve la table de corbeille par sécurité. Dans PrestaShop, le module supprime ses onglets et sa configuration, mais le commentaire du code indique que mprdeleteorders_trash est gardée.
Oui. Lorsque le suivi des achats est activé et que le module est autorisé à suivre le visiteur, il déclenche un événement Hotjar purchase depuis le hook de confirmation de commande PrestaShop. Le template front-office appelle hj('event', 'purchase') sur la page de confirmation de commande.
C’est utile pour l’analyse Hotjar, car vous pouvez filtrer les enregistrements, heatmaps, enquêtes ou funnels autour des sessions ayant atteint un achat, puis inspecter le comportement avant la commande. Cela aide à répondre à des questions comme où les acheteurs ont hésité, quelles étapes checkout ils ont rejouées, ou quels motifs de page apparaissent dans les sessions réussies.
Ce n’est pas un remplacement des analyses de revenus ou du reporting de commandes côté serveur. Hotjar reçoit l’événement nommé pour la segmentation comportementale ; les détails de commande du module servent surtout à construire le contexte local d’événement et ne constituent pas un flux transactionnel complet.
La fonctionnalité dépend des gardes normaux du module Hotjar. Le module doit être activé, le Hotjar Site ID doit être configuré en chiffres, le suivi des achats doit être activé, et le visiteur doit passer les contrôles de suivi du module, comme la gestion du consentement lorsque le respect du consentement est activé. Si le suivi n’est pas autorisé, le hook de confirmation de commande ne retourne rien.
Lorsque le hook s’exécute, le module construit un contexte d’achat local depuis la commande PrestaShop, avec des valeurs comme l’ID commande, la devise, la valeur totale, le nombre d’articles et les identifiants produit. Ce contexte est assigné au template de confirmation de commande et peut être utilisé par les outils locaux d’enregistrement/démo d’événements du module, mais l’appel Hotjar Events API effectué par le template reste le simple événement nommé purchase.
Dans Hotjar, utilisez l’événement purchase comme marqueur comportemental. Pour les totaux, taxes, marges, attribution, remboursements ou reporting de conversion faisant autorité, continuez à utiliser les données de commande PrestaShop ou une plateforme analytics conçue pour le reporting transactionnel.
Non. Le module envoie des événements PrestaShop et du contexte client à Klaviyo, mais la logique de campagne, les segments, le contenu email et les flows SMS sont gérés dans Klaviyo. Cette séparation est utile parce que les données boutique viennent de PrestaShop tandis que la stratégie marketing reste dans la plateforme marketing.
En termes de source, le côté PrestaShop est limité à la livraison de données onsite. Lorsque ENABLED est défini et que PUBLIC_API_KEY est présent, le hook d’en-tête charge le script onsite de Klaviyo avec le company id. Les valeurs par défaut d’installation laissent le module désactivé, gardent la clé publique vide, et fournissent des interrupteurs de suivi comme TRACK_VIEWED, TRACK_CART et TRACK_PURCHASE.
Le template front peut identifier les clients connectés avec email et prénom, suivre une page produit comme Viewed Product, et suivre la page panier comme Added to Cart. Il ne contient pas de constructeur de flow Klaviyo, éditeur de segment, éditeur de template email, écran de workflow SMS ou couche API de campagne. La source expose un interrupteur d’achat, mais le template de suivi navigateur inspecté ne sort pas d’appel de suivi d’achat ; l’automatisation d’achat doit donc toujours être vérifiée dans Klaviyo plutôt que supposée depuis le seul réglage PrestaShop.
PUBLIC_API_KEY=YOUR_KLAVIYO_PUBLIC_KEY ENABLED=1 TRACK_VIEWED=1 TRACK_CART=1Partiellement. Le module a des templates de cartes produit et un chargement de données produit, mais le chemin front-office implémenté n’est pas une colonne dropdown autonome product_list. MenuBuilder peut charger des éléments de colonne product_list depuis un ID catégorie et une limite, mais extractChildrenFromColumns() n’expose pas les éléments product_list comme enfants de menu, donc les marchands ne doivent pas compter sur ce type de colonne pour afficher des cartes produit tant que le support template/enfants n’est pas ajouté.
Le chemin implémenté aujourd’hui correspond aux aperçus produit sous les enfants d’arborescence de catégories. Ajoutez une colonne dropdown de type category_tree, activez PRODUCTS_NB avec une valeur supérieure à zéro, et le builder peut attacher des produits depuis chaque enfant de catégorie. Le template front-office rend ensuite le premier produit attaché comme carte mise en avant et les produits attachés restants comme petites cartes dans le panneau.
SHOW_PRICES et SHOW_DISCOUNTS contrôlent si les prix et badges de remise apparaissent ; les deux sont activés par défaut. PRODUCTS_NB contrôle combien d’aperçus produit d’enfants de catégorie sont attachés. Le TTL du cache menu contrôle la vitesse à laquelle les changements structurels apparaissent, et des hooks de mise à jour produit, catégorie et CMS sont enregistrés pour vider les données de menu en cache lorsque le contenu de la boutique change.
Implemented storefront path:
category_tree child + PRODUCTS_NB > 0 = product previews under that category child.
Not currently implemented as rendered storefront cards:
standalone product_list column.Le module rend le menu mobile depuis la même configuration de menu de premier niveau, avec un parseur mobile dédié. Cela réduit la maintenance en double et aide à garder la navigation desktop et mobile alignée. Vous devez quand même vérifier la mise en page mobile, car les libellés longs et les arborescences de catégories profondes peuvent affecter l’utilisabilité.
Les sorties desktop et mobile reçoivent toutes deux les mêmes données $menu.children pour l’arborescence off-canvas. Sur mobile, le template rend cette arborescence, tandis que HtmlMobileTreeParser et le builder de menu peuvent convertir plusieurs mises en page de colonnes desktop en structure mobile plus simple, incluant arborescences de catégories, arborescences de catégories CMS, catégories de blog, groupes de liens, liens CMS, listes de liens, arbres mobiles dérivés du HTML et onglets visuels.
Cela signifie que vous maintenez normalement les libellés, liens, arborescences de catégories, liens CMS, onglets visuels et contenu d’arbre mobile personnalisé compatible une seule fois dans le module. L’exception pratique concerne le contenu qui n’est pas extrait dans menu.children. En particulier, les colonnes desktop product_list ne sont pas extraites dans l’arbre mobile actuel, et le template mobile ne rend que $menu.children ; le contenu product-list nécessiterait un support de template front/mobile avant d’apparaître dans le menu off-canvas.
Le HTML personnalisé est un autre point à tester. Si une colonne contient un balisage inhabituel et aucun arbre mobile exploitable, le parseur mobile peut se rabattre sur une structure simple ou vide ; testez donc les libellés longs, les arbres imbriqués et le HTML promotionnel à une vraie largeur mobile avant de vous appuyer dessus pour la navigation.
Non. Le module connecte PrestaShop à Tidio et contrôle le comportement de chargement front-office. Les flows chatbot, la gestion de la boîte de réception et les workflows d’opérateur sont gérés dans Tidio, là où ces outils doivent se trouver.
Les réglages PrestaShop sont des réglages de connexion et de rendu : PUBLIC_KEY est requis et validé, ENABLED vaut 1 par défaut, et le widget peut être retardé, masqué sur mobile, limité par type de page, et recevoir optionnellement l’email/nom du client connecté via PASS_USER_DATA.
PUBLIC_KEY=your_tidio_public_key ENABLED=1 PAGES=all DELAY=0 PASS_USER_DATA=1Sur le front office, le template définit seulement des données optionnelles document.tidioIdentify et ajoute le script hébergé de Tidio depuis code.tidio.co. Il n’y a pas de constructeur de bot côté PrestaShop, vue de boîte de réception, écran d’assignation d’opérateur, table d’historique de messages ou API de flow dans ce module ; l’automatisation commerciale/support doit donc toujours être configurée dans le tableau de bord Tidio.
La configuration enregistre l'état d'activation, le titre, le message HTML, la visibilité du champ newsletter, le délai en secondes, la durée du cookie en jours et l'affichage sur toutes les pages ou uniquement sur la page d'accueil.
Après sa fermeture par le visiteur, le script définit le cookie mprwpop_seen avec le nombre de jours configuré. Le script de la popup vérifie ce cookie avant de l'afficher à nouveau.
Non. Le champ email est seulement affiché dans ce module. Lorsque SHOW_NEWSLETTER est activé, le template front affiche un formulaire newsletter avec un champ email et un bouton Subscribe, mais le module lui-même ne contient aucun contrôleur front, gestionnaire AJAX, insertion dans une table abonnés ou intégration de module newsletter qui stocke les adresses soumises.
Le script de popup gère uniquement le timing d’affichage, la fermeture de la modale, la fermeture avec la touche Escape, et le cookie mprwpop_seen. Il n’intercepte pas la soumission du formulaire et n’envoie l’adresse nulle part.
Si vous voulez capturer des leads, connectez ce formulaire à votre propre gestionnaire, à un module newsletter, à un endpoint Brevo ou Mailchimp, ou à une action de formulaire niveau thème que votre boutique traite. Tant que cette intégration n’existe pas, activer le champ affiche seulement une boîte email ; cela ne crée pas d’abonnés newsletter.
Les réglages liés du module décident seulement si le champ est affiché et à quelle fréquence le popup apparaît. Les valeurs par défaut d’installation définissent SHOW_NEWSLETTER à 0, DELAY à 3 secondes, COOKIE_DAYS à 7, et SHOW_ON à all ; SHOW_ON=homepage le limite au contrôleur index.
Le cookie de visibilité est défini lorsque l’acheteur ferme le popup, clique sur l’overlay ou appuie sur Escape. Soumettre le formulaire newsletter ne crée pas d’enregistrement abonné dans ce module, et le formulaire template n’a pas d’URL d’action ; un marchand doit donc le traiter comme un placeholder front-end jusqu’à ce qu’il soit connecté à un vrai endpoint newsletter.
<form class='mprwpop-newsletter' id='mprwpop-nl-form' method='post'>Oui. Lorsque le réglage d'affichage est limité à la page d'accueil, le hook renvoie du contenu uniquement si la page courante du front controller est la page index.
Ajoutez votre Microsoft UET Tag ID numérique et activez le suivi navigateur dans le module. Le hook d’en-tête PrestaShop charge le script UET, pousse l’événement de chargement de page, puis envoie les événements navigateur configurés lorsque le suivi est actif et que les règles de consentement l’autorisent.
Sur une nouvelle installation, le suivi n’est pas actif tant que ces réglages ne sont pas complets : ENABLED vaut 0 par défaut, TAG_ID est vide, et le module ne se considère actif que lorsque le tag ID est numérique. Dans le formulaire admin, enregistrez l’ID de balise Microsoft Ads UET sans lettres ni espaces, gardez RESPECT_CONSENT activé si vous utilisez un module cookie pris en charge, et décidez quels interrupteurs d’événements doivent rester activés.
TAG_ID=123456789 ENABLED=1 RESPECT_CONSENT=1 TRACK_PAGE_VIEW=1 TRACK_PRODUCT_VIEW=1 TRACK_PURCHASE=1Lorsque le hook d’en-tête s’exécute, il peut aussi capturer msclkid depuis l’URL d’arrivée pour le matching de conversion ultérieur. L’exclusion des employés est activée par défaut via EXCLUDE_EMPLOYEES, donc les tests effectués en étant connecté au back-office peuvent ne pas déclencher d’événements sauf si vous tenez compte de ce réglage.
Oui, il prend en charge Microsoft Conversions API pour les événements d’achat côté serveur, mais seulement lorsque les réglages requis sont complets. Le module a besoin du suivi activé, d’un TAG_ID numérique, de CAPI_ENABLED activé, d’un CAPI_ACCESS_TOKEN enregistré, et du suivi des achats activé.
- Validation admin : le UET Tag ID doit contenir uniquement des chiffres, CAPI ne peut pas être activé sans tag ID numérique, le bearer token est requis lorsque CAPI est activé, et la limite de lot de file doit être entre 1 et 100.
- Flux commande : sur
actionValidateOrder, le module vérifiecanTrack(),TRACK_PURCHASEet la disponibilité CAPI avant de mettre quoi que ce soit en file. - Flux de file : une conversion d’achat est mise en file pour le fournisseur
microsoft_uet, liée à l’ID commande, puis le module traite immédiatement un petit lot de 3 événements. La tâche cron traite plus tard le lot normal configuré.
La balise navigateur UET peut toujours gérer les événements de page, panier, recherche et remarketing ; le chemin CAPI dans ce module est spécifiquement le chemin d’achat côté serveur.
Pour la configuration, les champs CAPI importants sont :
CAPI_ENABLED=1 CAPI_ACCESS_TOKEN=your_microsoft_token CAPI_BATCH_LIMIT=20 TRACK_PURCHASE=1Le client API envoie les événements à Microsoft UET CAPI en utilisant le tag ID numérique dans l’endpoint et un bearer token. La charge utile normalise le nom/ID/heure/source URL de l’événement, le consentement ad-storage, les données utilisateur et les données d’achat personnalisées. Le matching utilisateur peut inclure l’adresse IP, le user agent, le msclkid stocké, les détails client hachés et les identifiants anonymes de panier/invité lorsqu’ils sont disponibles.
Ce n’est pas un remplacement côté serveur de chaque événement navigateur du module. Les événements page view, product view, search, add-to-cart, wishlist et click/URL/controller personnalisés restent côté navigateur dans la source inspectée ; CAPI est le complément serveur pour les achats.
Le module regroupe les événements Microsoft Ads UET autour des activités de commerce front-office, compte, recherche et déclencheurs personnalisés. Les principaux événements sont configurables individuellement dans les réglages du module.
- Commerce/front-office :
pageView,productView,addToCart,addToWishlist,initiateCheckoutetpurchase. Les événements produit, panier et achat incluent des paramètres commerce comme les ID produit, valeurs de commande, devise et quantités lorsque disponibles. - Recherche :
searchse déclenche sur les pages de résultats de recherche avec le contexte de requête. - Compte :
signUpest déclenché après inscription client via le flux de hook d’inscription du module. - Personnalisé : les événements personnalisés peuvent être configurés avec des déclencheurs de clic, URL, contrôleur ou événement DOM, avec des noms d’événements limités aux règles de nommage UET autorisées par le module.
L’événement d’achat est envoyé sur la page de confirmation de commande, tandis que les événements add-to-cart et wishlist sont capturés par des écouteurs JavaScript front-office.
La plupart de ces interrupteurs sont activés par défaut à l’installation, notamment TRACK_PAGE_VIEW, TRACK_PRODUCT_VIEW, TRACK_ADD_CART, TRACK_ADD_WISHLIST, TRACK_INITIATE_CHECKOUT, TRACK_SEARCH, TRACK_PURCHASE et TRACK_SIGNUP. TRACK_CUSTOM_EVENTS est désactivé par défaut jusqu’à ce que vous définissiez des règles d’événement personnalisées.
Les règles personnalisées sont volontairement bornées : le normaliseur de config accepte jusqu’à 15 noms d’événements distincts, retire les paramètres réservés event_id, et prend en charge les sélecteurs de clic, correspondances URL contains, noms de contrôleurs ou événements DOM personnalisés. Le JavaScript front-office déduplique les événements de boutons add-to-cart et wishlist pendant environ une seconde, afin que la même action ait moins de chances d’être comptée deux fois.
Oui. Avec RESPECT_CONSENT activé, le module vérifie le consentement marketing avant de considérer le suivi Microsoft UET comme actif. Il vérifie d’abord mprcookiesrevolution en lisant le cookie mprcr_consent et en cherchant marketing:1. Si ce cookie est absent, il se rabat sur la valeur DEFAULT_CONSENT de ce module. Si Cookies Revolution n’est pas actif, il vérifie mprcookiebanner via mprcookie_consent=granted, en se rabattant là aussi sur le réglage de consentement par défaut de ce module lorsque le cookie est absent.
Si aucun module de consentement MPR pris en charge n’est actif, la fonction de consentement retourne autorisé, donc le suivi n’est pas bloqué par le consentement seul. Pour un blocage GDPR strict, gardez RESPECT_CONSENT activé et installez/configurez l’un des modules de consentement pris en charge.
Le flux msclkid s’exécute dans le hook d’en-tête. Le module lit msclkid depuis l’URL d’arrivée, accepte uniquement les caractères A-Za-z0-9._:- jusqu’à 500 caractères, le reflète dans $_COOKIE['mprbuet_msclkid'], puis écrit un cookie HTTP-only nommé mprbuet_msclkid pour 7776000 secondes. Les données utilisateur de conversion côté serveur ultérieures peuvent inclure cet ID de clic Microsoft stocké lorsqu’il est présent.
https://shop.example/?msclkid=abc123stockeabc123dans le cookie du module.- Un achat ultérieur peut attacher cette valeur aux données de conversion Microsoft UET si les conversions côté serveur sont configurées.
Le contrôle de consentement côté serveur et le garde JavaScript front-office travaillent ensemble mais ne sont pas identiques. Le garde PHP canTrack() bloque la construction d’événements pour les employés, les modules désactivés et le consentement marketing échoué ; le template d’en-tête vérifie aussi les cookies navigateur avant de charger bat.js lorsqu’un module de consentement client pris en charge est présent.
Si RESPECT_CONSENT est défini à 0, le contrôle de consentement est contourné. Si aucun module de consentement MPR pris en charge n’est installé, la fonction PHP autorise le suivi du seul point de vue du consentement, donc les boutiques strictes ne doivent pas s’appuyer sur le module UET seul comme unique couche de consentement.
Le cookie msclkid est écrit avant l’achat ultérieur, ce qui compte car un acheteur peut arriver depuis Microsoft Ads, naviguer, puis commander lors d’une requête ultérieure. La valeur n’est acceptée que si elle correspond à la liste blanche de caractères du module ; les valeurs invalides ou trop longues sont ignorées au lieu d’être envoyées à Microsoft.
Non. Le tag navigateur n'est injecté par le hook d'en-tête PrestaShop que lorsque le suivi est actif, c'est-à-dire quand un TAG_ID numérique est enregistré et que ENABLED vaut 1. La bibliothèque Microsoft est alors ajoutée avec script.async = true depuis https://bat.bing.com/bat.js, elle se charge donc sans bloquer le rendu de la page.
Au chargement, le module envoie un seul pageLoad vers window.uetq, puis uniquement les événements que vous avez activés, comme la vue produit, l'ajout au panier ou l'achat, via uetq.push('event', ...). Si un module de consentement compatible est présent, le pixel n'est chargé qu'après confirmation du consentement marketing dans le navigateur, donc les visiteurs qui refusent ne déclenchent aucune requête vers Microsoft.
L'envoi côté serveur via la Conversions API s'exécute dans une tâche cron planifiée, pas dans la requête du client, et les employés connectés sont exclus par défaut via EXCLUDE_EMPLOYEES.
Lorsque la Conversions API est activée et qu'un jeton bearer Microsoft est enregistré, les événements d'achat sont mis en file d'attente à la validation de la commande et envoyés côté serveur par une tâche cron planifiée, send_bing_uet_conversions, qui s'exécute toutes les 300 secondes. Chaque exécution traite la file jusqu'à la limite de lot configurée (CAPI_BATCH_LIMIT, défaut 20, autorise 1–100 et plafonne à 100 lignes par exécution), de sorte que les événements en échec ou en attente sont réessayés au cycle suivant au lieu d'être perdus.
Les données utilisateur côté serveur peuvent inclure l'identifiant de clic Microsoft stocké (msclkid), l'e-mail et le téléphone hachés, l'IP client et le user-agent. Les entrées traitées et obsolètes sont nettoyées automatiquement, l'historique récent est conservé et les anciennes lignes sont supprimées avec le temps.
Si le jeton bearer est manquant ou vide, le bloc d'état de l'admin affiche un avertissement et aucun événement côté serveur n'est envoyé tant que vous ne l'avez pas ajouté. L'UET navigateur peut rester activé indépendamment pour les vues de page et le remarketing pendant que vous configurez la Conversions API.
Non, pas pour le bouton de contact Messenger de base. Le réglage requis est le Facebook Page ID numérique ; sans App ID configuré, le template front-office affiche un lien direct https://m.me/{page_id} afin que les acheteurs ouvrent Messenger depuis le bouton flottant.
- Mode lien m.me : exige que le module soit activé et qu’un Page ID valide soit présent. Il est rapide à configurer et fonctionne comme un simple lien de contact Messenger externe.
- Mode SDK : le module traite un champ App ID rempli comme le déclencheur pour rendre le balisage du plugin customer chat Facebook et charger le SDK customer chat Facebook. Le texte de salutation est utilisé dans ce balisage en mode SDK.
Les marchands qui veulent seulement un bouton Messenger fiable peuvent donc laisser l’App ID vide. Ajoutez l’App ID uniquement lorsque vous voulez volontairement le chemin de chat intégré basé sur le SDK et que la configuration côté Facebook est prête.
L’exigence de Page ID est stricte : le validateur de configuration requise accepte uniquement des chiffres, 5 à 32 caractères, et le widget ne s’affiche pas tant que le module est activé mais que ce champ est vide. Les valeurs par défaut activent le widget, l’affichent sur toutes les pages y compris mobile, utilisent le style icône en bas à droite, et un délai d’affichage de 0 seconde.
Les réglages d’apparence comme POSITION, STYLE, CTA_TEXT, COLOR, SIZE, MARGIN, infobulle et animation sont utilisés par le chemin de bouton lien flottant. Le filtrage par page et la visibilité mobile viennent du garde de chat partagé, donc vous pouvez afficher le point d’entrée Messenger uniquement sur les pages produit, catégorie ou checkout si cela correspond à votre flux support.
La méthode de fetch vérifie d'abord RSS_URL. Si elle est vide, elle construit une URL RSS depuis BOARD_URL. Les URLs de pins ne sont utilisées que lorsque le chemin RSS ne produit aucun post.
Non. mprpinterestintegration est un module de contenu/feed Pinterest, pas le module de suivi publicitaire Pinterest. Il affiche des pins, tableaux ou contenus alimentés par RSS Pinterest sur la boutique et inclut une gestion de cache pour le feed affiché. La source contient aussi des réglages optionnels de publication via l’API Pinterest pour la publication de produits/contenus.
- Pinterest Feed Integration : utilisez-le pour afficher du contenu Pinterest sur le front-office, configurer des noms d’utilisateur, URL de pin, URL de tableau ou sources RSS, et éventuellement publier du contenu de boutique sur Pinterest.
- Pinterest Tag : utilisez le module Pinterest Tag séparé pour la mesure publicitaire, les événements de tag navigateur et le suivi optionnel via l’API Conversions comme visites de page, vues produit, ajout au panier, checkout, recherche et inscription.
Si l’objectif est une meilleure mise en scène visuelle ou l’intégration de contenu Pinterest, utilisez cette intégration de feed. Si l’objectif est l’attribution Pinterest Ads ou l’optimisation de conversion, utilisez plutôt le module Pinterest Tag.
Pour le chemin feed, la source requise peut être aussi simple qu’une ou plusieurs URL de pins enregistrées, ou une URL de tableau/source RSS selon la façon dont vous voulez sélectionner le contenu. Les réglages de feed partagés contrôlent le hook d’affichage, le nombre de posts, les colonnes, la mise en page grille/slider, le bouton follow, la visibilité mobile et la durée de cache ; le cache vaut par défaut 3600 secondes et peut être rafraîchi depuis l’admin du module.
Le chemin optionnel de publication est également séparé du tracking publicitaire. La publication Pinterest exige des identifiants API Pinterest comme un access token et un board ID, et le publisher envoie des données de pin basées sur l’image à Pinterest. Cela n’installe toujours pas le tag publicitaire Pinterest et ne reporte pas les conversions publicitaires ; pour cela, la boutique a besoin du module séparé mprpinteresttag.
La config map inclut ACCESS_TOKEN, BOARD_ID, AUTOPUBLISH et AUTOPUBLISH_CAPTION. La publication est gérée via le PinterestPublisher partagé.
Chaque item de feed pointe vers l'URL du pin, affiche l'image thumbnail, un badge vidéo optionnel, un texte overlay, le nom d'auteur optionnel et une caption optionnelle selon les réglages du module et les données source.
Le module exige la Website Key Smartsupp. Son panneau de configuration indique au marchand de la copier depuis les réglages Smartsupp, et le validateur de configuration obligatoire considère une clé vide comme invalide.
Si PASS_USER_DATA est activé et que le client est connecté, le trait chat partagé renvoie customer_email et customer_name. Le template les assigne à _smartsupp.email et _smartsupp.name.
Non. Le template charge le script de widget externe de Smartsupp. L'interface de chat visible est fournie par Smartsupp après l'exécution du chargeur.
Oui. Si le réglage DELAY est supérieur à zéro, le template encapsule l'initialisation Smartsupp et l'injection du script dans setTimeout.
Non, vous n’avez pas besoin d’un compte développeur TikTok uniquement pour afficher des vidéos. Le feed d’affichage repose sur des URL de vidéos TikTok collées et sur l’endpoint public oEmbed de TikTok. Dans les réglages du module, saisissez le nom d’utilisateur TikTok pour le lien follow, collez une URL de vidéo TikTok par ligne dans le champ Video URLs, puis enregistrez.
Lorsque le feed est construit, le module découpe la liste d’URL enregistrée par ligne, ignore les entrées qui ne contiennent pas tiktok.com, appelle https://www.tiktok.com/oembed?url=..., et stocke le titre, la légende, l’auteur, la miniature et le HTML d’intégration retournés pour l’affichage. Ce chemin d’affichage n’utilise pas de token API, de revue d’app ou d’identifiants développeur.
Les identifiants ne sont pertinents que pour le workflow optionnel de publication. La source a des réglages de publication comme ACCESS_TOKEN, CLIENT_KEY, AUTOPUBLISH et AUTOPUBLISH_CAPTION, et utilise une instance de publisher TikTok pour ce chemin. Si votre objectif est seulement d’intégrer des vidéos TikTok sélectionnées sur la boutique, vous pouvez laisser ces identifiants de publication vides.
Le module d’affichage est activé par défaut, avec les interrupteurs de légende, icône de vues et icône de likes activés, tandis que les valeurs de feed partagées utilisent displayHome, 6 posts, 3 colonnes desktop, une mise en page grille, lazy loading et une durée de cache de 3600 secondes. Le feed ne s’affiche que dans le hook social-feed configuré ; si le hook configuré ne correspond pas au hook courant, rien n’est sorti.
Il y a deux cas pratiques : les URL sans tiktok.com sont ignorées, et toute requête oEmbed qui échoue est ignorée au lieu de rendre une carte cassée. La carte front-office pointe vers l’URL TikTok originale et affiche la miniature, l’auteur et la légende retournés ; les vidéos supprimées/privées ou les réponses oEmbed bloquées réduiront donc simplement le feed.
VIDEO_URLS=https://www.tiktok.com/@brand/video/1234567890 USERNAME=brand SHOW_CAPTION=1 POST_COUNT=6Oui. Le trait chat commun vérifie le réglage mobile avant le rendu et ne renvoie aucun bouton lorsque l'affichage mobile est désactivé pour un visiteur mobile.
Non, le module ne gère pas les agents, l’historique des conversations ou les workflows support. WhatsApp lui-même gère la conversation, tandis que le module gère le bouton front-office et l’URL click-to-chat. Cela garde l’intégration légère et claire.
Le seul champ de connexion requis est PHONE. Il doit contenir uniquement des chiffres, 7 à 20 caractères, avec indicatif pays et sans signe plus ni espaces. Le template front construit https://wa.me/{phone}, et si un message est configuré, il ajoute ?text=... afin que WhatsApp le préremplisse.
- Ce que PrestaShop contrôle : activation/désactivation, numéro de téléphone, message prérempli optionnel, position, style icône/barre, texte CTA, couleur, taille, marge, infobulle, animation, visibilité mobile, délai d’affichage et filtre de page.
- Ce que WhatsApp contrôle : le fil de discussion réel, les réponses, l’assignation du personnel, l’historique des messages, les notifications et toutes les fonctionnalités de boîte de réception ou CRM.
Le message optionnel prend en charge {product} sur les pages produit et {url} pour la page courante, ce qui est utile pour les questions produit. Cela reste seulement un message WhatsApp prérempli, pas un ticket ou un enregistrement support PrestaShop stocké.
Le module remplace {url} par l'URL de la page courante. Sur les pages produit, il peut aussi remplacer {product} par le nom du produit courant.
Le module peut être rendu depuis le hook footer ou before-body, mais un indicateur statique interne évite la double sortie. Le périmètre peut couvrir toutes les pages, les pages produit, les pages catégorie ou les pages liées au checkout.
Ajoutez le code d’invitation Discord dans la configuration du module et activez le widget. Dans PrestaShop, le module affiche un bouton front-office lié à discord.gg avec le code d’invitation stocké, et une position, un style, un texte CTA, une couleur, une taille, une infobulle, une animation et une marge configurables.
Utilisez uniquement le code d’invitation, pas l’URL complète. Le validateur de configuration requise attend des lettres, chiffres, tirets et underscores, 2 à 64 caractères. Un code d’invitation manquant empêche le rendu ; un code enregistré invalide est signalé par l’avis de configuration et peut produire un mauvais lien Discord.
INVITE_CODE=AbCdEfG123 ENABLED=1 STYLE=icon POSITION=bottom-right CTA_TEXT=Join our DiscordÀ l’installation, les valeurs par défaut définissent déjà le widget comme activé, en bas à droite, style icône, bleu Discord #5865F2, taille 60px, marge 20px, infobulle activée, animation pulse, mobile activé, toutes les pages, et aucun délai. Le panneau de configuration admin recommande de créer une invitation permanente et un canal support dédié, car le module envoie les acheteurs vers le flux d’entrée sur le serveur au lieu de gérer les conversations Discord dans PrestaShop.
Oui, le widget peut être limité par type de page. Dans PrestaShop, le garde de chat partagé prend en charge toutes les pages, les pages produit, les pages catégorie ou les contrôleurs liés au checkout, et vérifie aussi le réglage séparé de visibilité mobile avant le rendu.
Le filtre de page est stocké dans le réglage partagé PAGES. Le garde retourne true pour all, vérifie php_self=product pour les pages produit, php_self=category pour les pages catégorie, et traite cart, order, order-opc, orderopc et checkout comme contrôleurs liés au checkout.
Le même garde exige aussi ENABLED et un INVITE_CODE non vide, et masque le widget sur mobile lorsque SHOW_MOBILE est désactivé. Le ciblage par page n’est donc pas un snippet séparé à coller dans le thème ; il fait partie de la décision de rendu du module avant la sortie du CSS et du bouton.
PAGES=product SHOW_MOBILE=1 DELAY=0Oui, le module possède un réglage de délai pour le bouton front-office. Dans PrestaShop, le template de hook écrit une valeur data-delay et un petit script masque le widget puis l'affiche après le nombre de secondes configuré.
Non, le module n’envoie pas de texte prérempli dans Discord. Le réglage de connexion requis est un code d’invitation, pas un token API utilisateur/message, et le template front-office affiche un lien vers https://discord.gg/{invite_code}.
Le champ admin Pre-filled Message est stocké pour référence et le module peut remplacer {url} en interne avant d’assigner les données template, mais le template front-office actuel ne sort pas ce message et ne l’ajoute pas à l’URL d’invitation Discord.
C’est différent des plateformes de chat qui prennent en charge des paramètres d’URL pour une conversation préremplie. Les liens d’invitation Discord envoient l’acheteur vers un flux d’invitation/rejoindre un serveur, donc la configuration pratique consiste à créer un lien d’invitation permanent et à orienter les clients vers un canal support après leur arrivée.
La source confirme cette séparation. Le formulaire de connexion admin étiquette le champ comme Pre-filled Message, mais sa description indique qu’il n’est pas utilisé pour les invitations Discord et qu’il est stocké pour référence. Dans le hook, le module remplace {url} dans le message enregistré avant d’assigner les données Smarty, mais le template utilise seulement invite_code, position/style/CTA/apparence, infobulle, animation et délai.
Pour les marchands, la configuration fiable est l’invitation elle-même : créez un code d’invitation stable, empêchez son expiration, et utilisez les règles de serveur/canal Discord pour guider les clients après leur arrivée. Ne comptez pas sur ce module pour ouvrir un DM Discord direct, publier dans un canal ou transmettre un message checkout/produit à Discord.
Non, c’est un module de navigation linguistique. Il aide les acheteurs à passer entre les langues que vous exploitez déjà, et les dirige vers les URL localisées lorsque PrestaShop dispose des données. La qualité de traduction, le ciblage pays et la logique de localisation du visiteur restent en dehors de ce module.
Le module lit les langues PrestaShop actives pour la boutique courante avec Language::getLanguages(true, shop_id). Si la boutique n’a qu’une seule langue active, il ne retourne aucun sélecteur. Pour chaque langue, il associe l’ISO de langue à un SVG de drapeau lorsqu’il existe, construit une URL de langue depuis les URL de langues alternatives du contrôleur front lorsqu’elles sont disponibles, et se rabat sur getLanguageLink() de PrestaShop.
- Navigation : la sortie desktop masque le sélecteur de langue desktop natif et affiche un dropdown de drapeaux dans
displayNav2; la sortie mobile peut afficher un select simple dansdisplayMobileLanguageSelector. - Libellés :
SHOW_LABELcontrôle si le code ISO courant est affiché à côté du drapeau, etSHOW_NAMEScontrôle si les noms complets de langues sont affichés dans le dropdown. Les valeurs par défaut sont label désactivé et noms activés. - Limites : il ne traduit pas les noms/descriptions de produits, ne choisit pas les langues par géolocalisation, ne redirige pas les visiteurs par pays, et ne crée pas d’URL localisées manquantes.
Il existe un nettoyage supplémentaire des URL pour les alias de pages cœur et un hook d’intégration pour les chemins de filtres traduits de MPR Filter Revolution, mais cela dépend toujours de routes/données traduites existantes. C’est un sélecteur, pas un moteur de traduction.
Il enregistre displayHeader, displayOrderConfirmation, actionCustomerAccountAdd et actionValidateOrder.
Non. Le template de confirmation de commande et le builder de conversion serveur utilisent l'événement Pinterest checkout pour les commandes terminées, avec valeur de commande, quantité, devise, ID de commande et event ID.
CAPI_ENABLED doit être activé, le Pinterest ad account ID doit contenir uniquement des chiffres et l'access token ne doit pas être vide. Le batch limit doit être compris entre 1 et 100.
Oui, lorsqu'une règle personnalisée a capi activé. Le front conversion bridge mappe les noms d'événements navigateur connus et accepte aussi les noms d'événements CAPI personnalisés configurés.
Les valeurs par défaut d'installation mettent ENABLED à 0 et USERNAME à une chaîne vide. Le hook de rendu s'arrête tôt sauf si le module est activé et qu'un nom d'utilisateur existe.
Non, il ouvre votre profil Snapchat via le nom d’utilisateur configuré. Le contenu du profil et les conversations restent dans Snapchat lui-même. Cela garde le module concentré sur un chemin clair permettant aux acheteurs de vous suivre ou de vous contacter sans ajouter un lourd feed social à la page.
La sortie front-office est un bouton flottant rendu depuis le hook displayBeforeBodyClosingTag. Le hook s’arrête avant le rendu si le bouton Snapchat n’est pas activé, si la valeur USERNAME est vide, si l’affichage mobile est désactivé pour un visiteur mobile, ou si le contrôleur courant est listé dans EXCLUDE_PAGES. Lorsqu’il s’affiche, la destination est construite comme https://www.snapchat.com/add/ plus le nom d’utilisateur encodé dans l’URL.
Le template confirme qu’il s’agit d’un lien normal, pas d’une intégration Snapchat. Il sort une balise <a> avec l’URL configurée, target=_blank optionnel, texte d’infobulle, style de bouton, animation et message grabber optionnel. Il n’y a pas d’iframe, pas d’appel API Snapchat, pas de renderer de feed et aucun code qui lit les conversations ou le contenu de profil depuis Snapchat.
Required for output: ENABLED=1
Required account value: USERNAME=yourbrand
Rendered link: https://www.snapchat.com/add/yourbrandPour les marchands, cela signifie que le module a un impact faible : il donne aux visiteurs un chemin visible vers votre présence Snapchat tout en laissant tout le contenu Snapchat, les follows, messages et la confidentialité du compte sous le contrôle de l’application et du site Snapchat.
La définition de configuration liste small, medium et large, libellés 48px, 60px et 72px. La taille choisie est transmise à la classe du widget sous forme mprchat-size-....
Non. Ce module affiche un lien flottant vers un profil Snapchat. Snapchat Pixel et le suivi des événements publicitaires sont gérés par un autre module de ce lot.
Lorsque les wishlists invité sont activées, le script front stocke les ID produit dans le localStorage du navigateur et renvoie des réponses en mode invité pour les actions d'ajout et de retrait. Le stockage connecté utilise les tables de base de données du module.
La configuration JavaScript marque le client comme connecté, et l'action de synchronisation peut envoyer les articles localStorage au serveur afin de les ajouter à la wishlist par défaut du client.
Les wishlists en base disposent d'un token de 32 caractères. La vue front peut charger les produits par token, et le template traite le propriétaire connecté différemment d'un visiteur consultant une wishlist partagée.
Lorsqu'un client connecté enregistre un produit, le module stocke le prix au moment de l'ajout. La liste de produits compare ce prix stocké avec le prix actuel du produit et signale une baisse lorsque le prix actuel est inférieur.
Non. Ce module est surtout un tracker d’automatisation Brevo et une synchronisation d’inscription client, pas une intégration complète d’événements panier/commande/produit.
- Gère :
displayBeforeBodyClosingTagcharge le script d’automatisation Brevo, appelle la fonction de suivi de page, et identifie le visiteur par email lorsqu’un client est connecté.actionCustomerAccountAddpeut créer ou mettre à jour le nouveau client comme contact Brevo lorsque l’auto-subscription est activée. - Ne gère pas : les mises à jour de panier, les payloads de vue produit, les événements d’achat de confirmation de commande, les événements de panier abandonné ou les événements de statut de commande. Le module n’enregistre pas de hooks panier, commande ou produit pour ces actions.
Si vous avez besoin de panier abandonné, de revenus d’achat ou d’automatisation de comportement produit dans Brevo, ce module nécessiterait des hooks d’événements supplémentaires ou une intégration séparée qui envoie ces événements Brevo spécifiques.
La liste de hooks est la limite importante : le module enregistre seulement displayBeforeBodyClosingTag et actionCustomerAccountAdd. Le template front-office crée window.sib, charge https://sibautomation.com/sa.js?key=..., met en file les fonctions Brevo standard et appelle window.sendinblue.page(). Si un client est connecté, il appelle aussi window.sendinblue.identify() avec l’adresse email. Aucun ID produit, ligne de panier, référence de commande, total ou statut de commande n’est ajouté à ce payload navigateur.
À la création de compte, le module poste vers l’endpoint contacts Brevo avec l’email du client, FIRSTNAME, LASTNAME, updateEnabled=true, et le LIST_ID configuré lorsqu’il est enregistré. C’est utile pour la croissance de liste et l’entrée dans des automatisations de base, mais c’est séparé du tracking d’événements ecommerce.
Registered hooks: displayBeforeBodyClosingTag, actionCustomerAccountAdd
Contact API: POST https://api.brevo.com/v3/contacts
Tracked browser event here: page view, plus logged-in email identify
Not present here: cart payload, purchase payload, abandoned cart eventActivez le module, ajoutez une clé API Brevo, et gardez la synchronisation automatique des inscriptions activée. Lorsque PrestaShop crée un compte client, le hook actionCustomerAccountAdd envoie l’email plus les attributs FIRSTNAME et LASTNAME à Brevo, et inclut l’ID de liste configuré lorsqu’il est enregistré.
Les réglages pertinents sont ENABLED, API_KEY, LIST_ID et AUTO_SUBSCRIBE. À l’installation, le module démarre avec ENABLED=0, une clé API vide, un ID de liste vide, une clé client tracker vide et AUTO_SUBSCRIBE=1. La configuration habituelle est donc : activer Brevo, coller la clé API depuis Brevo, saisir éventuellement l’ID numérique de liste pour les nouveaux contacts, et laisser Auto-subscribe New Customers activé.
La synchronisation ne s’exécute que pour les créations de nouveaux comptes client, car le module écoute actionCustomerAccountAdd. Il vérifie d’abord que le module est actif, que la clé API existe, que l’auto-subscribe est activé, et que PrestaShop a fourni un objet newCustomer chargé. Si l’un de ces contrôles échoue, il retourne sans rien envoyer à Brevo.
Lorsqu’il envoie, le module poste du JSON vers https://api.brevo.com/v3/contacts avec un timeout cURL de 10 secondes et la vérification SSL peer activée. Il définit updateEnabled à true, donc un contact Brevo existant peut être mis à jour au lieu de provoquer un échec de contact en double. Cette version source ne fait pas d’import en masse des clients existants et ne synchronise pas les modifications de profil ultérieures sauf si PrestaShop crée un nouveau compte via ce hook.
Required: ENABLED=1, API_KEY set, AUTO_SUBSCRIBE=1
Optional: LIST_ID=123
Sent fields: email, FIRSTNAME, LASTNAME, listIds when configuredOui. Le hook front-office charge le tracker d’automatisation Brevo uniquement lorsque le module est activé, que la Brevo API Key est configurée et que la Client Key est configurée. Le champ Client Key dans les réglages du module est libellé Client Key (Tracker), et l’indication source dirige les marchands vers Brevo > Automation > Settings > Tracking Code.
Pour confirmer que le tracker est chargé, ouvrez la source du front-office ou les outils développeur du navigateur et cherchez https://sibautomation.com/sa.js?key=... avec l’ID de script sendinblue-js. Le template initialise window.sib.client_key, met en file sendinblue.track, sendinblue.identify, sendinblue.trackLink et sendinblue.page, identifie les clients connectés par email, puis appelle window.sendinblue.page().
Si vous ne voyez pas ce script, vérifiez d’abord l’interrupteur d’activation du module, l’API Key et la Client Key. Le hook retourne une chaîne vide lorsque l’un de ces prérequis manque.
L’exigence d’API key compte même si le tracker navigateur utilise la Client Key. Dans ce module, isActive() est partagé par le hook tracker et vérifie à la fois ENABLED et API_KEY ; ensuite le hook vérifie séparément CLIENT_KEY. Une boutique avec seulement la Client Key enregistrée ne sortira donc toujours rien tant que la clé API n’est pas configurée aussi.
Required for tracker output:
ENABLED=1
API_KEY=xkeysib-...
CLIENT_KEY=Brevo automation tracker keyLa sortie du tracker se limite au script d’automatisation Brevo, au suivi de page et à l’identification email des clients connectés. Elle n’ajoute pas de contenu de panier, totaux de commande, métadonnées produit ou événements d’achat dans cette version source.
Oui, la synchronisation automatique des inscriptions peut être désactivée depuis la configuration du module. Le hook PrestaShop actionCustomerAccountAdd vérifie l’interrupteur AUTO_SUBSCRIBE avant d’envoyer un nouveau client à Brevo, donc le module peut rester installé pendant que la synchronisation d’inscription est désactivée.
Le réglage est libellé Auto-subscribe New Customers dans les options du module. Sa valeur par défaut est activée sur une installation fraîche, mais le hook la vérifie chaque fois que PrestaShop crée un compte client. Lorsque AUTO_SUBSCRIBE est désactivé, le hook sort avant de valider le nouvel objet client ou d’appeler l’API contacts Brevo.
Désactiver cet interrupteur arrête seulement la synchronisation inscription-vers-contact. Cela ne désinstalle pas le module, ne retire pas les identifiants API enregistrés, et ne désactive pas automatiquement le tracker d’automatisation front-office. Si ENABLED, API_KEY et CLIENT_KEY restent configurés, le hook tracker peut toujours charger le script Brevo et appeler la fonction de suivi de page.
Cela ne désabonne pas et ne supprime pas non plus les contacts déjà créés dans Brevo. Cela empêche simplement ce module d’envoyer les futures créations de nouveaux comptes contact tant que l’interrupteur reste désactivé.
AUTO_SUBSCRIBE=1: new customer can be posted to Brevo contacts
AUTO_SUBSCRIBE=0: actionCustomerAccountAdd returns before syncContactToBrevo()Vous pouvez ajouter Crisp chat à PrestaShop en saisissant votre Crisp Website ID et en activant le module. L’avis de configuration du module attend le Website ID au format UUID, mais il exige seulement que le champ soit non vide ; il n’impose pas le motif UUID exact lors de l’enregistrement ou de l’affichage du widget. En pratique, vous devez quand même coller le vrai Website ID au format UUID depuis Crisp, car une valeur arbitraire non vide peut être enregistrée et rendue mais peut ne pas charger un widget fonctionnel.
À l’installation, le module Crisp crée des valeurs de chat par défaut avec ENABLED=1, un WEBSITE_ID vide, SHOW_MOBILE=1, PAGES=all, DELAY=0 et PASS_USER_DATA=1. Comme le Website ID commence vide, le module peut être installé et activé, mais le widget reste inactif tant que cet ID n’est pas enregistré.
L’avis de configuration requise attend un format UUID, par exemple xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. L’aide de configuration pointe vers Crisp sous Settings > Website Settings > Setup instructions. Une fois une valeur non vide enregistrée, le front-office applique toujours les mêmes règles d’affichage, donc le widget respecte l’interrupteur d’activation, un Website ID non vide, le réglage mobile et le ciblage par page.
Lorsque ces règles sont respectées, le template définit window.CRISP_WEBSITE_ID, pousse optionnellement les données email/nom du client connecté, et ajoute https://client.crisp.chat/l.js de façon asynchrone dans le head de la page.
Minimum setup:
Enable Crisp Chat = Yes
Website ID = UUID from Crisp
Show on Pages = All Pages, Product Pages, Category Pages or Checkout PagesOui, Crisp chat peut être limité par type de page PrestaShop. Le garde de chat partagé prend en charge toutes les pages, les pages produit, les pages catégorie ou les contrôleurs checkout, notamment cart, order, order-opc, orderopc et checkout, avant de sortir le script Crisp.
Le réglage est le champ select partagé Show on Pages. Ses valeurs stockées prises en charge sont all, product, category et checkout. La valeur par défaut du module est all, donc une installation fraîche avec un Website ID valide sera éligible à l’affichage sur chaque page front-office sauf si le marchand modifie ce réglage.
La correspondance de page utilise le contrôleur courant PrestaShop php_self. Le mode produit uniquement correspond exactement à product, le mode catégorie uniquement à category, et le mode checkout correspond à cart, order, order-opc, orderopc ou checkout. L’interrupteur mobile est vérifié séparément, donc une page peut correspondre à la règle de page et rester masquée sur mobile si SHOW_MOBILE est désactivé.
Show on Pages = all -> every page
Show on Pages = product -> product controller only
Show on Pages = category -> category controller only
Show on Pages = checkout -> cart/order checkout controllersSi une valeur inattendue est stockée dans PAGES, la branche par défaut du garde partagé autorise la page plutôt que de la bloquer. Pour un ciblage prévisible, utilisez l’une des quatre valeurs exposées par le formulaire.
Oui, mais seulement lorsque la transmission des données client est activée et que l’acheteur est connecté. Le réglage est l’interrupteur Pass Customer Data dans la configuration du module Crisp ; définissez-le sur No pour empêcher le module d’envoyer les données d’identité du client connecté à Crisp.
- Lorsque
PASS_USER_DATAest désactivé, le helper de chat partagé retourne des champs client vides. - Lorsqu’il est activé et que le client est connecté, le helper retourne l’email du client et son prénom plus son nom.
- Le template Crisp les envoie comme
user:emailetuser:nicknameavant de chargerhttps://client.crisp.chat/l.js.
Les visiteurs anonymes reçoivent quand même le widget Crisp lorsque le Website ID et les règles d’affichage l’autorisent, mais aucun email ou nom de client PrestaShop n’est transmis car il n’y a pas d’objet client connecté.
Sur une installation fraîche, PASS_USER_DATA vaut par défaut 1, donc les marchands qui ne veulent pas cette transmission doivent désactiver l’interrupteur volontairement. Le helper n’expose que deux valeurs au template : customer_email et customer_name. Il n’inclut pas les données d’adresse, numéros de téléphone, contenu de panier, historique de commandes ou ID client PrestaShop.
Le hook Crisp doit aussi respecter les règles d’affichage normales du module. Si le module est désactivé, le Website ID manque, l’affichage mobile est bloqué, ou la règle de page ne correspond pas, le template n’est pas rendu et aucune donnée client n’est poussée vers Crisp.
PASS_USER_DATA=1 + logged-in customer: email and first name + last name can be pushed
PASS_USER_DATA=0 or anonymous visitor: customer_email and customer_name stay emptyOui, le script Crisp peut être retardé d’un nombre de secondes configuré. Le template hook PrestaShop actuel enveloppe le chargeur Crisp dans setTimeout lorsque le délai est supérieur à zéro ; il n’attend pas le scroll, le clic, le toucher ou une autre interaction utilisateur.
Le réglage enregistré est DELAY, affiché dans le formulaire partagé comme Fallback Delay (seconds). Dans le module Crisp actuel, le hook transmet cette valeur au template comme entier. Si la valeur est supérieure à zéro, le template enveloppe tout le bloc de configuration Crisp et d’ajout de script dans setTimeout(..., DELAY * 1000).
Une valeur de 0 signifie que le template n’ajoute pas de wrapper timeout, donc la configuration Crisp s’exécute immédiatement lorsque la sortie du hook est analysée. Bien que la description du champ partagé mentionne la première interaction utilisateur et un repli, ce template Crisp implémente uniquement le comportement de timer décrit ci-dessus.
DELAY=0 -> no setTimeout wrapper; load immediately
DELAY=5 -> run Crisp setup after 5 seconds
DELAY=15 -> run Crisp setup after 15 secondsLe délai ne contourne pas la chaîne normale de gardes. Le module doit toujours être activé, le Website ID doit être présent, l’affichage mobile doit être autorisé pour les visiteurs mobiles, et la règle de ciblage par page doit correspondre avant qu’un script retardé soit imprimé.
Configurez les ID produit exclus dans le réglage de liste de produits du module, par exemple sous forme de liste séparée par des virgules. L’override retire les produits exclus du package transmis au calcul de règle panier de PrestaShop, donc les remises monétaires sont calculées uniquement sur les produits éligibles.
Excluded product IDs: 42,108,315
Cart: #42 $100 excluded + #77 $50 eligible
Voucher: 20% off products
Before exclusion: 20% of $150 = $30 discount
After exclusion: 20% of $50 = $10 discount; #42 stays at full priceLa même liste d’exclusion peut être combinée avec des exclusions de catégories et de fabricants, car le module fusionne les trois sources en un seul ensemble de produits exclus. Les remises en pourcentage s’appliquent uniquement aux produits éligibles. Les réductions à montant fixe sont proratisées via le package filtré, tandis que la livraison gratuite et le comportement de cadeau sont laissés à la gestion normale des règles panier de PrestaShop.
Le réglage de liste de produits est stocké sous PRODUCTS. Le résolveur lit la valeur séparée par des virgules, convertit chaque entrée avec intval, retire les zéros vides, puis fusionne ces ID avec les ID dérivés des catégories et fabricants. La liste finale est mise en cache pour la requête PHP courante, ce qui évite de répéter les requêtes de catégorie et fabricant pendant le même calcul de panier.
L’override CartRule modifie uniquement les règles avec une réduction monétaire : reduction_percent supérieur à zéro ou reduction_amount supérieur à zéro. Si le module n’est pas activé, si la liste d’exclusion configurée se résout vide, ou si le package de règle panier courant ne contient aucun produit exclu, il délègue au calcul parent de PrestaShop sans changement.
Comme le filtre vérifie id_product, l’exclusion s’applique au produit entier. Si un produit a des déclinaisons, la source ne distingue pas une combinaison d’attributs d’une autre dans cette étape d’exclusion.
Stored setting: PRODUCTS=42,108,315
Resolver output: [42,108,315,...category matches,...manufacturer matches]
Override input: package products
Override output: package products without excluded id_product valuesOui. Les exclusions peuvent être saisies comme ID produit directs, ID catégorie et ID fabricant. Les champs de config admin sont des listes séparées par des virgules, et le résolveur les convertit en une liste finale d’ID produit avant le calcul de remise.
PRODUCTS=12,15
CATEGORIES=3,7
MANUFACTURERS=1,4Avec cette configuration, les produits 12 et 15 sont exclus directement. Le module interroge aussi category_product pour chaque produit assigné aux catégories 3 ou 7, et interroge product pour chaque produit dont id_manufacturer est 1 ou 4. Il fusionne ces ID, supprime les doublons avec array_unique, et met le résultat en cache pour la requête courante.
L’override CartRule demande ensuite au module cette liste de produits résolue et filtre les produits exclus hors du package avant que la remise de règle panier parent soit calculée. En termes marchands : les produits correspondants restent au prix plein, tandis que le reste du panier peut quand même recevoir la remise du bon.
La règle catégorie est basée sur les ID catégorie exacts enregistrés dans CATEGORIES. La requête source lit les lignes depuis category_product où id_category est dans cette liste ; elle ne parcourt pas l’arbre de catégories en PHP. Si une boutique doit exclure aussi toutes les catégories enfants, ces ID de catégories enfants doivent être inclus sauf si les produits sont également assignés directement à la catégorie parente listée.
La règle fabricant est basée sur product.id_manufacturer. Comme pour les produits directs, l’exclusion finale se fait par id_product, donc toutes les déclinaisons d’un produit correspondant sont traitées comme exclues. Les entrées texte invalides sont effectivement réduites par conversion entière ; les valeurs vides et zéro ne contribuent pas d’ID produit utiles.
Category source: ps_category_product.id_category IN saved category IDs
Manufacturer source: ps_product.id_manufacturer IN saved manufacturer IDs
Final discount filter: id_product not in resolved exclusion listNon, l’override cible les réductions monétaires des règles panier, pas l’avantage de livraison gratuite lui-même. Si le module est désactivé, si aucun produit exclu n’est configuré, ou si la règle panier n’a pas de réduction en pourcentage ou à montant fixe, l’override délègue au calcul normal CartRule de PrestaShop.
Exemple : un bon donne 10% de remise plus la livraison gratuite, et le panier ne contient que des produits exclus par ce module. La remise produit devient 0 parce que chaque produit est exclu de la réduction monétaire, mais si la règle a free_shipping et que PrestaShop calcule l’action de livraison, l’override délègue au calcul parent de livraison, donc la partie livraison gratuite peut toujours s’appliquer.
Pour les paniers mixtes, le module filtre les produits exclus avant le calcul parent. Les remises en pourcentage s’appliquent uniquement aux produits éligibles, et les remises à montant fixe sont calculées par PrestaShop sur le package filtré.
Le chemin rapide est important pour les bons de livraison gratuite uniquement. Lorsqu’une règle panier n’a pas de reduction_percent et pas de reduction_amount, l’override retourne le résultat parent PrestaShop sans filtrer le package. Cela signifie qu’un bon de livraison gratuite pur suit les conditions normales de bon PrestaShop et n’est pas réduit simplement parce que des produits sont dans la liste d’exclusion.
Lorsque tous les produits sont exclus et qu’une règle combine une remise monétaire avec la livraison gratuite, l’override retourne 0 pour la partie monétaire sauf si le filtre courant est l’un des filtres d’action shipping/all de PrestaShop. Pour ces filtres shipping/all, il appelle le calcul parent avec FILTER_ACTION_SHIPPING, ce qui est la raison au niveau source pour laquelle l’avantage de livraison peut rester disponible.
Un piège pratique : l’avis panier optionnel est séparé des maths de remise. Le renderer d’avis vérifie si le module et l’avis sont activés, si le panier a des règles panier, et si des produits exclus sont présents. Il n’inspecte pas si la règle panier est monétaire ou uniquement livraison gratuite ; le message peut donc rester informatif pendant que PrestaShop gère la livraison normalement.
Oui, le module peut afficher un avis panier lorsque des produits exclus sont présents. Dans PrestaShop, l’avis apparaît uniquement lorsque le module et le réglage d’avis sont activés, que le panier a des règles panier, et qu’au moins un produit du panier correspond à la liste d’exclusion.
La fonctionnalité d’avis est activée par défaut à l’installation avec SHOW_NOTICE=1. Le texte d’avis multilingue par défaut est The following products are excluded from the applied discount:, et les marchands peuvent modifier NOTICE_TEXT depuis les réglages du module. Le module enregistre à la fois displayShoppingCart et displayShoppingCartFooter ; le hook footer est conservé comme alias de compatibilité pour les boutiques qui utilisent encore l’ancien placement de hook.
Le renderer dispose aussi d’un garde anti-doublon. Une fois qu’un avis a été rendu pendant la requête, $cartNoticeRendered empêche le même message d’apparaître deux fois si les deux hooks panier s’exécutent dans le thème.
Le module construit la liste de noms produits depuis les produits du panier courant dont id_product apparaît dans la liste d’exclusion résolue. Si product_name est indisponible, il se rabat sur name, puis sur un libellé générique de numéro produit. Le template échappe le texte d’avis et les noms de produits avant la sortie.
Notice shown only if:
ENABLED=1
SHOW_NOTICE=1
cart has at least one cart rule
cart contains at least one resolved excluded productSi aucun bon/règle panier n’est appliqué, l’avis est volontairement masqué même si des produits exclus sont dans le panier. Cela lie le message au moment où le client attend une remise et peut se demander pourquoi certains articles sont restés au prix plein.
Le champ obligatoire est le HubSpot Portal ID. L'alerte de configuration requise du module reste active tant que ce champ est vide.
Le template HubSpot examiné identifie les clients connectés par e-mail lorsque pass-user-data est activé. Il n'envoie pas de données de visiteurs anonymes depuis PHP.
Le trait de chat partagé prend en charge toutes les pages, les pages produit, les pages catégorie ou les pages liées au checkout comme cart, order, order-opc, orderopc et checkout.
Non. Le code utilise un timeout configuré en millisecondes avant de rendre le widget. Il s'agit d'un délai temporel, pas d'un chargement déclenché par une interaction.
Aucun moteur de règles automatique n'est présent dans les fichiers lus ici. L'affectation des badges est enregistrée par produit dans mprproductbadges, et le formulaire admin exige un produit sélectionné.
La table enregistre id_product, badge_name, badge_color, badge_bg_color, position et active, ainsi que l'ID de badge auto-incrémenté.
La requête storefront filtre par produit et par statut actif, puis trie les résultats par position ASC. Les numéros de position les plus bas s'affichent en premier.
Oui. MprProductBadgesConfig expose un interrupteur ENABLED. Lorsqu'il est désactivé, renderBadges() renvoie une chaîne vide avant de lire les données produit.
Le module doit être activé et un Pixel ID doit exister. Le validateur de configuration obligatoire accepte les Pixel ID contenant lettres, chiffres, underscores ou tirets, avec une longueur de 8 à 128 caractères.
displayOrderConfirmation rend l'événement purchase navigateur. actionValidateOrder met en file un événement purchase côté serveur lorsque Conversions API est configurée et que le suivi purchase est activé.
Les événements header et purchase reçoivent un event_id depuis PrestaShopConversionBuilder::buildEventId, et la même valeur est copiée dans client_dedup_id. La mise en file Purchase CAPI utilise le même event ID basé sur la commande.
Les règles peuvent se déclencher à partir de clics CSS, correspondances d'URL, correspondances controller/module ou événements DOM nommés. Le normaliseur valide les exigences des triggers, limite la longueur des sélecteurs et assainit les paramètres personnalisés avant de stocker le JSON.
Le flux a besoin d'un bearer token et d'un nom d'utilisateur lorsque le module n'est pas géré par Social Revolution. Le module peut appeler X API pour résoudre l'user ID à partir de ce nom d'utilisateur.
La configuration contrôle le texte du post, la date, les likes, les reposts, les réponses, les médias et les détails auteur. Le code construit aussi des permaliens et gère les expansions media renvoyées par l'API.
Le module mappe les pages et hooks front-office PrestaShop vers les événements Criteo OneTag, avec des réglages séparés pour chaque événement standard.
| Événement | Où il se déclenche | Notes |
|---|---|---|
viewHome | Page d'accueil depuis displayHeader | Contrôlé par le réglage de tracking accueil. |
viewItem | Page produit depuis displayHeader | Utilise le contexte produit courant. |
viewCategory | Page catégorie/listing depuis displayHeader | Utilise le contexte catégorie/listing et les données produit visibles lorsque disponibles. |
viewSearchResult | Page de résultats de recherche depuis displayHeader | Inclut le contexte de recherche et les données produit correspondantes lorsque disponibles. |
viewBasket | Page panier ou checkout depuis displayHeader | Utilise les lignes du panier courant. |
addToCart | JavaScript front-office dans le template header | Capturé depuis les interactions de mise à jour panier et d'ajout au panier. |
trackTransaction | Confirmation de commande depuis displayOrderConfirmation | Utilise la référence de commande, la devise et les lignes achetées. |
custom | Règles configurées de clic, URL, contrôleur ou événement DOM | S'exécute uniquement lorsque le tracking d'événement personnalisé est activé et que les règles correspondent. |
Tous les événements navigateur dépendent quand même du module actif, d'un Criteo partner ID configuré, du passage du visiteur dans les vérifications tracking/consentement du module et de l'activation du toggle propre à l'événement pertinent.
Oui, il peut respecter le consentement cookie lorsque RESPECT_CONSENT est activé, ce qui est la valeur par défaut du module. Le module vérifie d’abord mprcookiesrevolution en analysant le cookie mprcr_consent et en cherchant marketing:1. Si ce cookie manque, il se rabat sur la valeur DEFAULT_CONSENT de mprcookiesrevolution.
Si Cookies Revolution n’est pas actif, il vérifie mprcookiebanner. Une valeur de cookie mprcookie_consent=granted autorise Criteo ; toute autre valeur présente le bloque. Si le cookie de bannière est absent, le module utilise le DEFAULT_CONSENT de mprcookiebanner.
Si aucun module de consentement MPR pris en charge n’est installé ou actif, hasMarketingConsent() retourne autorisé, donc Criteo n’est pas bloqué par le consentement seul. Pour une configuration stricte consent-first, gardez Respect marketing consent activé et utilisez l’un des modules de consentement MPR pris en charge. Le garde de consentement côté client n’est activé que lorsque Respect marketing consent est activé et que mprcookiesrevolution ou mprcookiebanner est actif.
Le contrôle de consentement fait partie de canTrack(), utilisé avant les événements d’en-tête, les événements d’achat de confirmation de commande et la mise en file des achats côté serveur. Ainsi, lorsque le contrôle de consentement côté serveur bloque le suivi, le module ne construit pas les événements navigateur normaux et ne met pas en file la conversion côté serveur depuis actionValidateOrder.
Le template navigateur inclut aussi un contrôle de consentement côté client lorsque le garde de consentement est actif. Il peut appeler window.MPRCR.isGranted('marketing') lorsque Cookies Revolution expose ce helper, ou lire directement les mêmes cookies mprcr_consent et mprcookie_consent. Si ce contrôle JavaScript retourne false, il s’arrête avant de pousser des événements Criteo dans window.criteo_q.
RESPECT_CONSENT=0: consent check is bypassed
RESPECT_CONSENT=1 + mprcr_consent contains marketing:1: allowed
RESPECT_CONSENT=1 + mprcookie_consent=granted: allowed
RESPECT_CONSENT=1 + no supported MPR consent module: allowed by this moduleLe consentement n’est pas le seul garde de suivi. Le suivi navigateur exige aussi ENABLED=1 et un Criteo Partner ID numérique valide, et la navigation des employés peut être exclue lorsque EXCLUDE_EMPLOYEES est activé.
Oui, lorsque SEND_CUSTOMER_IDENTIFIERS est activé. Le module construit des événements client Criteo séparés aux côtés des événements normaux de page ou d’achat. Il n’envoie jamais l’email en clair dans ces événements client ; il met l’email en minuscules, le trim, puis le hache en SHA-256. L’ID client est aussi haché avec un préfixe customer:.
[{"event":"setCustomerId","id":"sha256(customer:123)"},{"event":"setEmail","email":"sha256(alice@example.com)"}]Les valeurs ci-dessus sont des placeholders montrant seulement la forme. Dans la vraie sortie front-office, les champs de hash contiennent des chaînes hex SHA-256 de 64 caractères. Les événements sont entièrement omis lorsque les identifiants client sont désactivés ou qu’aucun client valide ne peut être chargé depuis le contexte courant ou la commande.
Le réglage est désactivé par défaut, donc un marchand doit l’activer explicitement avant que ces événements soient créés. Pour les événements de page normaux, le module utilise le client PrestaShop courant depuis le contexte front-office. Pour les événements d’achat de confirmation de commande, il peut charger le client depuis le id_customer de la commande. Dans les deux chemins, la source vérifie qu’un objet client valide existe avant d’ajouter l’un ou l’autre événement d’identifiant.
Les templates navigateur placent ces événements d’identifiant dans la file universelle avec setAccount et setSiteType, avant que l’événement page, panier ou achat soit poussé vers window.criteo_q. Le module n’envoie pas le nom du client, son téléphone, son adresse postale ou l’ID client PrestaShop brut dans ces événements client navigateur.
Pour le suivi d’achat côté serveur, le même drapeau opt-in peut aussi ajouter une valeur d’email haché à la requête Retail Media lorsque le client de la commande a une adresse email. Ce chemin côté serveur dépend toujours des gardes de suivi normaux : le module doit être actif, le consentement doit autoriser le suivi lorsqu’il est activé, le suivi d’achat doit être activé, et les réglages Criteo côté serveur doivent être valides.
Oui. Le module dispose d’un suivi optionnel d’achat côté serveur Criteo Retail Media. Pour l’utiliser, le suivi d’achat doit être activé et les réglages côté serveur configurés : Criteo partner ID, S2S_ENABLED, région eu ou us, API page IDs desktop et mobile, et une limite de lot. La limite de lot côté serveur par défaut est 20, avec validation bornée de 1 à 100.
Lorsque PrestaShop déclenche actionValidateOrder, le hook met en file une conversion trackTransaction pour le fournisseur criteo_retailmedia et traite immédiatement un petit lot, mais il n’inspecte pas lui-même l’état de commande ou le statut de paiement. Le chemin de file s’exécute lorsque le suivi du module peut s’exécuter, que le suivi d’achat est activé, que la configuration côté serveur est valide, et qu’un objet Order chargé est présent. Si vous exigez une sémantique payé-uniquement, elle doit être garantie par le contexte de validation de commande ou ajoutée comme contrôle d’état explicite.
Une tâche cron nommée send_criteo_retailmedia_conversions est aussi enregistrée pour traiter les conversions en file toutes les 300 secondes. La requête serveur est envoyée à l’endpoint Retail Media de Criteo pour la région configurée, comme d.eu.criteo.com ou d.us.criteo.com, avec ID transaction, article, prix, quantité, devise, données visiteur/client et page ID. Le réglage optionnel S2S_SEND_IP_UA contrôle si les données IP et user-agent sont incluses. Cette file côté serveur est séparée de l’événement navigateur trackTransaction sur la page de confirmation de commande, donc les envois serveur échoués peuvent être réessayés sans dépendre de la session navigateur du client.
La fonctionnalité côté serveur est installée avec la table de file de conversion partagée et l’enregistrement cron. Elle est désactivée par défaut : S2S_ENABLED=0, S2S_REGION=eu, page ID desktop trackTransactionApiDesktop, page ID mobile trackTransactionApiMobile, S2S_SEND_IP_UA=1 et S2S_BATCH_LIMIT=20. Le Partner ID doit être numérique et comporter 4 à 20 chiffres, la région doit être eu ou us, et les page IDs peuvent contenir lettres, chiffres, underscore, deux-points et tiret.
À la validation de commande, le module vérifie d’abord les gardes de suivi de haut niveau : Criteo doit être actif, le suivi d’achat doit être activé, le consentement doit autoriser le suivi lorsque le garde de consentement est activé, et les réglages côté serveur doivent passer la validation. Si l’un de ces contrôles échoue, aucun événement serveur n’est mis en file.
Le payload d’achat est construit depuis les données de ligne de commande. Les ID articles, prix et quantités sont joints avec des pipes pour la requête Criteo Retail Media. Si aucun ID article ne peut être mappé, le module envoie un repli item=None, price=0.00 et quantity=1 plutôt qu’un champ requis vide. La valeur d’environnement est sélectionnée depuis le user agent comme desktop d, mobile m ou tablette t, et cet environnement choisit le page ID desktop ou mobile.
Le contrôleur admin expose aussi des outils opérationnels pour cette file : il peut afficher les nombres pending/sending/sent/failed, envoyer une sonde API, et remettre les événements Criteo côté serveur échoués en pending pour réessai.
Required server-side setup:
ENABLED=1
PARTNER_ID=12345
TRACK_PURCHASE=1
S2S_ENABLED=1
S2S_REGION=eu or us
S2S_DESKTOP_PAGE_ID=trackTransactionApiDesktop
S2S_MOBILE_PAGE_ID=trackTransactionApiMobileLorsqu'un user ID est configuré, le module appelle l'endpoint Facebook Graph media avec des champs comme caption, media_type, media_url, thumbnail_url, permalink, timestamp, like_count et comments_count. Sans user ID, il utilise en repli l'endpoint Instagram Basic Display me/media.
Le nombre de publications configuré est plafonné à 25 dans le code. La configuration par défaut utilise 12 publications.
Aucun chargement de Stories ni chemin de template Stories n'a été trouvé dans le code examiné. Le feed gère les publications de médias récentes, y compris les images, les miniatures vidéo et les badges carousel.
Le service de synchronisation vérifie que mprgalleryrevolution est actif, crée ou réutilise une galerie Instagram, télécharge les images, crée des enregistrements média Gallery Revolution et stocke des enregistrements de synchronisation avec les données d'engagement.
Le module crée sa propre table mprpsvls_view et enregistre les vues de pages produit par produit, boutique et invité. Les totaux de vues sont comptés comme invités distincts dans la période configurée.
Non. Les ventes sont calculées à partir des commandes et détails de commande PrestaShop, filtrés sur les commandes valides et la période configurée. Les réglages de boost peuvent modifier le nombre affiché, mais le comptage source vient de l'historique des commandes.
Si l'option de seuil minimum est activée, le module ne renvoie rien lorsque tous les compteurs actifs sont sous le minimum configuré. Cela évite l'apparition de blocs statistiques vides ou peu convaincants sur la page produit.
Le modal se charge via le contrôleur AJAX du module et peut afficher les commandes valides récentes pour le produit courant. Les données incluent le nom client, la ville, le pays, le nom du produit, la quantité et la date, avec anonymisation du nom disponible dans la configuration.
Le module utilise mprscd_description pour la catégorie, la boutique et l'enregistrement actif, et mprscd_description_lang pour le texte de description multilingue.
Pas par défaut. La configuration FIRST_PAGE_ONLY est installée comme activée, et le renderer renvoie une sortie vide lorsque le numéro de page catégorie demandé est supérieur à 1.
Sur les versions PrestaShop utilisant le hook du formulaire catégorie Symfony, le module ajoute une textarea formatée traduisible nommée mprscd_description directement après le champ de description natif.
L'injecteur insère l'appel de hook Smarty standard {hook h='displayMprSecondCatDesc'} entouré de commentaires marqueurs du module. Il refuse les chemins non sûrs en dehors des templates du thème et peut supprimer plus tard les injections marquées.
La constante de module PLATFORMS liste facebook, instagram, x, linkedin, pinterest, tiktok et youtube. Le controller de connexion inclut les chemins OAuth pour les plateformes où ils sont implémentés.
Le module instancie des services de tracking pour Facebook, Pinterest, Microsoft Ads, Google Ads, LinkedIn, TikTok, X, Snapchat, Reddit, Taboola et Outbrain. Les hooks header, confirmation de commande, validation de commande et sign-up délèguent à ces services.
Les tâches cron déclarées traitent la file de posts toutes les 60 secondes, rafraîchissent le cache des feeds toutes les 1800 secondes, renouvellent les tokens OAuth proches de l'expiration toutes les 3600 secondes, collectent les analytics chaque jour à 06:00 et traitent les files de conversion toutes les 300 secondes par provider.
L'écran analytics filtre par plage de dates et affiche posts, posts échoués, reach, impressions, engagement, clics et derniers followers pour chaque ligne de plateforme renvoyée au template.
Lorsqu'elle est configurée, elle met en file des payloads de conversion côté serveur avec les données d'événement et les identifiants disponibles comme twclid, champs client hashés et, en option, IP et user agent, puis envoie des requêtes signées vers le X ads API endpoint.
Le module doit être activé et une Pixel ID valide doit être enregistrée. Le tracking Purchase exige aussi une purchase event ID, et Conversions API requiert ses propres identifiants lorsqu'elle est activée.
Le code peut construire PageView, ViewContent, AddToCart, InitiateCheckout, Purchase, Search, AddToWishlist, SignUp et les événements personnalisés configurés, selon les interrupteurs actifs et le contexte de page.
Lorsque le respect du consentement est activé, le service vérifie les cookies de consentement pris en charge et les portes de consentement côté client. Le template front peut retarder le chargement jusqu'à l'octroi du consentement marketing.
Ajoutez votre Chatra Widget ID et activez le module. Le hook PrestaShop rend le script Chatra avant la balise de fermeture body, assigne l’ID à window.ChatraID, et charge https://call.chatra.io/chatra.js de façon asynchrone sur le front-office. Cela garde la configuration liée aux réglages du module et au comportement d’exécution PrestaShop.
À l’installation, le module Chatra définit ENABLED=1, un WIDGET_ID vide, SHOW_MOBILE=1, PAGES=all, DELAY=0 et PASS_USER_DATA=1. Le module peut donc être installé et activé, mais il ne sortira toujours pas le widget tant qu’un Widget ID non vide n’est pas enregistré.
La page de configuration libelle le champ Widget ID et l’aide source indique de le coller depuis Chatra sous Settings > General > Widget code. Le validateur de configuration requise vérifie seulement que la valeur n’est pas vide ; il n’impose pas un format de type UUID comme le module Crisp.
Avant le rendu, le garde de chat partagé vérifie que le module est activé, que le WIDGET_ID requis est présent, que l’affichage mobile est autorisé lorsque le visiteur est sur mobile, et que la règle de ciblage par page sélectionnée correspond au contrôleur courant. Lorsque ces contrôles passent, le template définit window.ChatraID, crée window.ChatraSetup, et ajoute le script loader Chatra de façon asynchrone.
Minimum setup:
Enable Chatra Chat = Yes
Widget ID = value copied from Chatra widget code
Show on Pages = all, product, category or checkoutSi PASS_USER_DATA est activé et que l’acheteur est connecté, le template place aussi l’email du client dans ChatraSetup.clientId. Il n’envoie pas le nom du client, son adresse, le contenu du panier ou l’historique de commandes dans ce template.
Oui, le script Chatra peut être retardé d’un nombre de secondes configuré. Dans PrestaShop, le template enveloppe le chargeur du widget dans setTimeout lorsque la valeur de délai est supérieure à zéro, puis charge le même script Chatra après ce délai.
Le réglage enregistré est DELAY, exposé via le formulaire de chat partagé comme Fallback Delay (seconds). Le module le transmet au template Smarty comme entier. Lorsque DELAY>0, le template enveloppe à la fois l’assignation window.ChatraID/window.ChatraSetup et le bloc d’ajout de script dans setTimeout(..., DELAY * 1000).
Lorsque DELAY=0, le template n’enveloppe pas le loader dans setTimeout, donc Chatra est initialisé immédiatement lorsque la sortie du hook est analysée. Le template actuel n’implémente pas le chargement au scroll, au clic, au toucher ou à la première interaction ; c’est un simple timer basé sur les secondes.
DELAY=0 -> load immediately
DELAY=3 -> wait 3 seconds, then load Chatra
DELAY=10 -> wait 10 seconds, then load ChatraLe réglage de délai n’affecte que le timing après que le module a décidé de rendre. Le garde normal s’applique d’abord : le module doit être activé, WIDGET_ID doit être enregistré, le réglage mobile doit autoriser l’appareil du visiteur, et la règle de ciblage par page doit correspondre.
Oui, le module peut limiter Chatra par type de page PrestaShop. Sa configuration prend en charge toutes les pages, les pages produit, les pages catégorie et les contrôleurs liés au checkout comme cart, order et checkout, donc le widget n’est pas nécessairement affiché sur chaque page front-office.
Dans la configuration du module, c’est le réglage PAGES. Les choix intégrés sont all, product, category et checkout ; checkout couvre la famille de contrôleurs cart/order utilisée par différentes versions de PrestaShop, notamment cart, order, order-opc, orderopc et checkout. Le widget est rendu depuis displayBeforeBodyClosingTag uniquement lorsque le module est activé, que le Widget ID requis est présent, que le réglage mobile autorise l’appareil courant, et que le contrôle de page passe.
Il y a une limite pratique : c’est un ciblage par type de page, pas un constructeur de règles par URL. Lorsque PAGES est défini à product, category ou checkout, les autres noms de contrôleur ne passent pas comme autorisés ; ils échouent au contrôle du type de page sélectionné. Le repli permissif concerne un réglage vide/all ou une valeur de configuration PAGES inattendue. Si vous devez inclure ou exclure une landing page unique ou un contrôleur très spécifique, il faudrait une règle au niveau code ou une couche de ciblage plus avancée dans Chatra lui-même.
Oui, mais dans le snippet Chatra rendu par ce module, seul l’email du client connecté est transmis à Chatra. Le helper de chat partagé peut collecter à la fois l’email et le nom lorsque PASS_USER_DATA est activé et que le client est connecté, mais le template Chatra écrit seulement l’email comme window.ChatraSetup.clientId.
Pour désactiver cette transmission de données, désactivez l’interrupteur Pass Customer Data dans les réglages du module Chatra. Le helper retourne alors des valeurs client vides et le template n’émet pas clientId. Aucun nom client, donnée de commande, donnée d’adresse ou donnée de groupe n’est imprimé par ce template Chatra.
Les déclencheurs de chat, le routage de chat, l’assignation d’opérateur et le design du widget restent configurés dans Chatra lui-même. Le module PrestaShop est surtout responsable du chargement de https://call.chatra.io/chatra.js avec le Widget ID et le délai optionnel.
La valeur d’installation par défaut de PASS_USER_DATA est activée, mais les données restent conditionnelles : l’objet client doit exister, le visiteur doit être connecté, et le hook front-office doit être autorisé à rendre. Les visiteurs invités ne reçoivent aucun identifiant client depuis ce module. Le réglage de délai est aussi géré localement : lorsque DELAY est supérieur à zéro, le template enveloppe le loader Chatra dans setTimeout ; lorsqu’il est zéro, le loader s’exécute immédiatement.
Pour les revues de confidentialité, la distinction importante est que le helper peut retourner un nom complet, mais ce template Chatra spécifique ne le sort pas. La seule valeur dérivée du client émise par le template est le clientId basé sur l’email, et seulement lorsque PASS_USER_DATA reste activé.
Oui. Le resolver vérifie le ciblage entity selector du produit et applique aussi les règles de groupe client, planning, pays et visibilité du stock avant qu'un onglet soit préparé pour l'affichage.
Le code prend en charge les types de contenu html, markdown, entities, mixed, contact et files. Les onglets entities et mixed peuvent rendre des produits sélectionnés et des pages CMS, tandis que les onglets fichiers exposent des téléchargements valides.
Le reCAPTCHA du formulaire de contact est configurable. Lorsqu'il est activé et que les clés sont configurées, le gestionnaire vérifie le token soumis auprès de Google avant d'enregistrer la demande ou d'envoyer l'email de notification.
Non. L'action getTabContent charge l'onglet demandé, vérifie qu'il est actif et confirme via le resolver qu'il s'applique au produit courant avant de renvoyer le HTML.
Le template du hook contient des branches pour facebook, twitter, pinterest, linkedin, whatsapp et email. Seuls les réseaux présents dans la liste configurée sont rendus.
Le module rend dans displayProductMetaShare et displayProductAdditionalInfo, mais displayProductAdditionalInfo renvoie vide après que productShareRendered a été défini.
Non. Le template utilise de simples liens anchor vers l'URL de partage de chaque plateforme et des icônes SVG inline. Aucun script social tiers n'est présent dans le template.
La méthode de rendu résout l'URL produit et le nom du produit, les encode pour les endpoints de partage et assigne aussi les valeurs brutes à Smarty. Si aucune URL ou ID produit ne peut être résolue, elle utilise l'URL de la page courante.
Le module doit être activé et la counter ID doit contenir uniquement des chiffres. Le service de tracking vérifie aussi l'exclusion des employés et les règles de consentement avant le tracking normal.
Selon la configuration et le contexte de page, il prépare des données de tracking pour page view, product view, category view, add to cart, add to wishlist, checkout start, recherche, signup et purchase.
Lorsque Measurement Protocol est activé, que la counter ID et le token sont configurés, et qu'une Yandex client ID valide est disponible, le hook de validation de commande peut mettre un payload Purchase en file et traiter un petit lot.
Le service lit les données de consentement MPR Cookies Revolution et MPR Cookie Banner lorsque ces modules sont présents. Si le respect du consentement est désactivé, le tracking est autorisé sans ces vérifications.
EU VAT Checker valide les numéros de TVA via VIES sur les formulaires d’adresse et les requêtes AJAX front-end. Dans PrestaShop, il charge la validation sur les pages order, address, cart et checkout, puis vérifie aussi les adresses enregistrées via les hooks add et update.
Sur le front-office, le module enregistre son JavaScript de validation uniquement pour la famille de pages checkout/adresse : order, address, cart et checkout. Le script surveille les champs TVA, normalise les numéros saisis en retirant espaces, points et tirets, met la valeur en majuscules, puis appelle le contrôleur AJAX du module. Il debounce les contrôles en direct et valide de nouveau au blur. À la soumission du formulaire, le script déclenche un appel de validation AJAX si nécessaire, mais il n’empêche pas la soumission et n’attend pas cette réponse AJAX.
Le blocage est implémenté côté serveur, le contrôle n’est donc pas seulement cosmétique. Sur PrestaShop 1.7+, le module s’accroche à la validation du formulaire d’adresse et ajoute des erreurs au champ TVA lorsque le numéro de TVA est invalide. Sur les flux plus anciens, il dispose aussi d’un hook hérité de soumission compte/adresse qui ajoute des erreurs contrôleur. Si le numéro de TVA n’a pas de préfixe pays, le code peut se rabattre sur le pays d’adresse sélectionné lorsque ce pays est dans l’UE. Les résultats sont mis en cache dans mpreuvatchecker_cache, avec CACHE_HOURS à 24 par défaut, donc les contrôles répétés n’appellent pas toujours VIES.
Les indisponibilités VIES sont contrôlées par ON_UNAVAILABLE. La valeur par défaut est accept, tandis que reject peut bloquer l’enregistrement d’adresse et skip évite d’imposer le résultat VIES. Ce réglage compte parce que la disponibilité de VIES UE est hors du contrôle de votre boutique.
Oui, il peut exiger un numéro de TVA lorsque le champ société est rempli. Dans PrestaShop, cela est contrôlé par le réglage REQUIRED_COMPANY, et le module ajoute une erreur de formulaire avant l’acceptation de l’adresse lorsque le champ TVA est vide.
La valeur par défaut de REQUIRED_COMPANY est désactivée, donc les marchands doivent l’activer volontairement. Une fois activée, la règle est conditionnelle : le module vérifie si le champ société a une valeur, et exige alors seulement le champ TVA. Un client particulier qui laisse le champ société vide n’est pas forcé de saisir la TVA simplement parce que le module est installé.
Le module expose la même règle au JavaScript front via requiredCompany, afin que les acheteurs puissent voir l’exigence avant de soumettre. La décision finale se fait toujours en PHP pendant la validation d’adresse, où le module ajoute l’erreur au formulaire d’adresse PrestaShop si la société est remplie et que la TVA manque. C’est plus sûr qu’un attribut required seulement dans le thème, qui pourrait être contourné ou absent d’un ancien template checkout.
Oui, il peut ajouter les clients avec des numéros de TVA UE valides à un groupe client sélectionné. Dans PrestaShop, cela exige GROUP_ENABLED et un GROUP_ID valide ; tout prix exonéré de taxe dépend toujours de votre configuration de groupes et de règles fiscales PrestaShop.
L’assignation se produit après le traitement d’ajout/mise à jour d’adresse, pas simplement pendant l’aperçu AJAX en direct. Lorsqu’une adresse enregistrée a un numéro de TVA UE analysable et que VIES retourne valide, le module appelle son helper de groupe et ajoute le client au groupe configuré. Si le client enregistre plus tard un état TVA vide ou invalide, le module peut retirer de nouveau ce groupe configuré lorsque la gestion des groupes est activée.
Il y a deux détails opérationnels importants. Premièrement, le module utilise les groupes client PrestaShop ; il ne réécrit pas lui-même toutes les règles fiscales et ne garantit pas des prix exonérés de TVA. Vous devez toujours configurer correctement le groupe cible et les règles fiscales dans PrestaShop. Deuxièmement, lors du retrait du groupe, le code évite de laisser le client sans aucun groupe en se rabattant sur le groupe client par défaut de la boutique si nécessaire.
Vous pouvez choisir si une panne VIES accepte, rejette ou ignore la validation. Dans PrestaShop, le réglage ON_UNAVAILABLE contrôle le résultat du formulaire d’adresse, tandis que CACHE_HOURS peut limiter les appels directs répétés grâce au cache.
Paid ajoute une condition où total_paid_real >= total_paid_tax_incl. Unpaid ajoute total_paid_real < total_paid_tax_incl. All n'ajoute aucune condition de paiement.
Non. La colonne disponible products_list utilise une sous-requête avec GROUP_CONCAT pour placer les noms de produits et les quantités dans un champ récapitulatif unique de la ligne de commande.
Non. processExport() renvoie false lorsqu'aucune colonne sélectionnée n'est envoyée, et le contrôleur affiche une erreur d'absence de données au lieu de diffuser un fichier vide.
L'installation stocke LIMIT avec la valeur 10000. Le formulaire permet aussi de définir un nombre maximal de lignes, et la requête n'omet le LIMIT SQL que lorsque la limite envoyée est égale ou inférieure à zéro.
Le module doit être activé et disposer d'un Quora Pixel ID valide. Le suivi peut toujours être bloqué par l'exclusion des employés ou par la barrière de consentement lorsque le chargement tenant compte du consentement est activé.
La configuration inclut des interrupteurs pour PageVisit, ViewContent, AddToCart, AddToWishlist, InitiateCheckout, Search, Purchase et SignUp, plus une configuration JSON validée pour les événements personnalisés.
Le chemin côté serveur exige l'interrupteur CAPI, un ID de compte publicitaire numérique et un access token. Les événements sont mis en file, nettoyés au fil du temps et envoyés à l'endpoint de conversions de Quora par lots configurés.
Uniquement lorsque l'advanced matching est activé et que le visiteur est un client connecté avec une adresse email. Dans ce cas, le module hashe l'email avant de le transmettre à l'initialisation du pixel Quora.
Oui, si des URL vidéo manuelles sont configurées. Le mode manuel sans API extrait les ID vidéo et utilise YouTube oEmbed et les URL de miniatures, mais il ne fournit pas le même enrichissement durée, vues et date que le mode API.
Une API key est requise lorsque le module doit récupérer automatiquement des vidéos depuis une playlist ID ou une channel ID via YouTube Data API.
L'extracteur d'ID vidéo gère les URL watch standard, les liens courts youtu.be, les URL embed et les URL shorts.
Le mode embed ouvre une lightbox iframe depuis le flux boutique. Le mode nouvel onglet envoie plutôt le visiteur vers la page vidéo YouTube.
Ajoutez le Microsoft Clarity Project ID, activez le suivi, enregistrez la configuration du module, puis vérifiez le script front-office. Le champ Project ID accepte uniquement 5 à 64 lettres ou chiffres, donc collez seulement l’ID projet, pas toute la balise script Clarity. L’aide du module dirige les marchands vers clarity.microsoft.com > Settings > Overview.
- Dans Microsoft Clarity, ouvrez le projet et copiez le Project ID depuis les réglages du projet.
- Dans PrestaShop, ouvrez les réglages du module Microsoft Clarity.
- Collez le Project ID dans Project ID et activez Enable Microsoft Clarity.
- Enregistrez. Le contrôleur admin rejette l’activation de Clarity sans Project ID, et rejette les ID hors du format alphanumérique 5-64.
- Ouvrez une page front-office et vérifiez la source de page ou le panneau réseau du navigateur pour
https://www.clarity.ms/tag/PROJECT_ID.
Le hook d’en-tête charge le script Clarity uniquement lorsque le suivi peut s’exécuter : le module doit être actif, la navigation des employés peut être exclue, et le consentement marketing doit être présent lorsque le module est configuré pour respecter un module de consentement MPR.
Par défaut, le module s’installe avec le suivi désactivé et un project id vide, mais la plupart des interrupteurs d’événements sont activés une fois le suivi actif. Le code peut envoyer des événements page view, product view, add-to-cart, wishlist, checkout start, search, purchase et signup, ainsi que des tags de page comme la devise et le type de page. Le suivi d’achat est émis sur la confirmation de commande et inclut des tags dérivés de la commande ; l’inscription est stockée comme drapeau cookie de courte durée pendant la création de compte et envoyée lors du prochain rendu d’en-tête correspondant.
La gestion du consentement est liée aux modules cookie MPR lorsqu’ils sont installés. Avec RESPECT_CONSENT activé, Cookies Revolution est vérifié via la catégorie marketing mprcr_consent, et Lightweight Cookie Banner via mprcookie_consent. Si aucun module n’est actif, le module traite le consentement comme disponible. Les événements personnalisés sont aussi pris en charge, mais leurs règles JSON sont validées : noms d’événements, sélecteurs, déclencheurs URL/contrôleur et payloads de tags doivent respecter les limites du module avant acceptation par le contrôleur admin.
Oui, il peut envoyer à Clarity des événements et tags e-commerce PrestaShop. Le module couvre page view, vue produit, ajout panier, début checkout, achat, recherche, wishlist et inscription; les tags achat peuvent inclure valeur, devise, nombre d'articles et référence.
Oui, le module peut respecter le consentement avant le suivi. Il vérifie le consentement fourni par mprcookiesrevolution ou mprcookiebanner, peut envoyer un signal de consentement Clarity et bloquer le tracking côté client jusqu'à l'accord marketing sur PrestaShop.
Oui, des événements Clarity personnalisés peuvent être configurés par règles JSON. Le module prend en charge les sélecteurs de clic, conditions URL, correspondance controller ou module et événements DOM, puis assainit les noms et tags avant l'envoi depuis PrestaShop.
Oui, le contrôleur d'override peut attribuer un même H1 à plusieurs catégories. Dans l'admin PrestaShop, l'Entity Selector stocke les IDs sélectionnés, tandis qu'une modification directe sur une catégorie la détache de l'override partagé si sa valeur H1 change.
Vous pouvez utiliser les placeholders pris en charge par le module dans les H1 personnalisés. Le resolver remplace nom de catégorie, nombre de produits, numéro de page, libellé de page, nom de boutique et langue, puis normalise le H1 PrestaShop final.
Oui, les valeurs H1 sont stockées par langue et peuvent utiliser un fallback selon la configuration. Si la langue PrestaShop actuelle n'a pas de H1, le resolver peut essayer la langue par défaut puis toute autre langue disponible avant de ne rien remplacer.
Non, ce n'est pas un outil de renommage global des catégories. Le module modifie le contenu de page catégorie et, si activé, le libellé de listing product-search, mais ne renomme pas l'objet Category PrestaShop dans la navigation, les URL ou autres contextes catalogue.
Oui, la configuration des moyens de paiement inclut Apple Pay, Google Pay, Link, cartes, PayPal et d’autres méthodes Stripe. Dans PrestaShop, la disponibilité des wallets est vérifiée et mise en cache afin de masquer ceux non compatibles avec le navigateur ou l’appareil.
Il vérifie que les clés Stripe actives correspondent au mode test ou live sélectionné. Dans PrestaShop, le mode test attend les préfixes pk_test et sk_test, tandis que le mode live attend pk_live et sk_live avant de considérer le checkout configuré.
Oui, il renvoie les choix transporteur avec nom, délai, prix, état sélectionné et options de paiement compatibles. Dans PrestaShop, le checkout AJAX enregistre le transporteur choisi dans le panier et le cookie, puis filtre les paiements selon la compatibilité configurée.
Stripe Express Checkout peut afficher des boutons sur les pages produit, panier, liste et hooks express personnalisés. Dans PrestaShop, le module enregistre les hooks d’actions produit, infos produit, boutons produit, panier et hooks personnalisés, avec des réglages par emplacement.
Sur actionOrderStatusPostUpdate, le module recherche l'équipe associée au nouvel état de commande natif. Si une équipe existe et que les notifications de changement de statut sont activées, il informe cette équipe du mouvement de la commande.
Le helper de pièces jointes accepte les formats d'image courants, PDF, fichiers Office et OpenDocument, CSV, texte, RTF, fichiers PowerPoint et EML. Il vérifie aussi le type MIME et rejette les fichiers qui ne respectent pas les règles de types autorisées.
Oui. MprWfEmployeePreference stocke notification_muted, et le contrôleur AJAX possède une action setNotificationMute pour l'employé courant.
Oui. Le panneau assigne à Smarty la dernière version de l'historique de workflow et un flag ENABLE_CONCURRENCY_CHECK, et l'endpoint AJAX du panneau renvoie aussi la version courante.
Il exige la Zendesk Chat account key. Le template front ajoute cette clé à l'URL du https://v2.zopim.com/ widget script.
Oui. Lorsque la transmission des données client est activée et que les données sont disponibles, le template appelle le setter Zendesk live chat avec le nom et l'e-mail du client.
Oui. Le trait chat partagé vérifie le périmètre de page configuré avant le rendu et prend en charge toutes les pages, les pages produit, les pages catégorie et les controllers liés au checkout.
Si le délai configuré est supérieur à zéro, le template encapsule le code d'injection du script Zendesk dans un timeout JavaScript pour ce nombre de millisecondes.
L'Audit SEO PrestaShop examine votre boutique réelle et vos données Search Console concrètes, plutôt que de dérouler une checklist générique de crawler qui ignore la façon dont PrestaShop est construit. L'objectif est d'identifier les problèmes qui font réellement bouger le trafic organique sur un catalogue PrestaShop, et de comprendre pourquoi ils surviennent dans votre boutique, votre thème et votre pile de modules spécifiques. Voici ce qu'examine un spécialiste :
Indexabilité
Nous confirmons que les pages censées se positionner sont effectivement éligibles au positionnement. Cela implique de vérifier vos règles robots.txt, vos directives noindex et la justesse des canonical sur les produits, les catégories, les pages CMS et les listes paginées. PrestaShop est connu pour générer des variations d'URL explorables, filtres de navigation à facettes, paramètres de tri, ?search_query= et combinaisons d'attributs. Qui peuvent gonfler le budget de crawl ou diluer les signaux. Nous comparons ce que vous soumettez à ce que Google a réellement indexé, afin que les écarts entre pages soumises et pages indexées ressortent clairement.
Données structurées
Nous validons vos données JSON-LD Product, Offer, BreadcrumbList et Organization au regard des véritables exigences des résultats enrichis, et pas seulement avec un vérificateur de syntaxe. L'absence des champs de prix, de disponibilité ou d'avis empêche couramment les résultats produits d'afficher des fiches enrichies, et les thèmes PrestaShop varient énormément quant à la complétude de ce balisage.
Maillage interne
Nous cartographions les pages orphelines, le maillage transversal faible entre catégories et la façon dont le jus de lien circule dans le catalogue. Un maillage interne solide est l'un des leviers de positionnement les plus maîtrisables sur une grande boutique, et il est fréquemment négligé lorsque les catégories grandissent de manière organique.
Sitemaps XML & hreflang
Nous examinons vos sitemaps XML pour repérer les écarts entre pages soumises et indexées et, sur les boutiques multilingues, nous vérifions que les signaux hreflang sont réciproques et corrects afin que la bonne version linguistique et géographique soit servie.
Lacunes de contenu
Enfin, nous identifions les pages superficielles, les duplications et les intentions de recherche manquées, les endroits où la page existe mais ne répond pas à ce que les internautes recherchent réellement.
Parce qu'un spécialiste examine directement votre boutique et votre propriété Search Console, chaque constat reflète votre situation réelle plutôt qu'une liste théorique de bonnes pratiques.
À l'issue de l'Audit SEO, vous recevez un plan d'action priorisé, rédigé dans un langage clair, et non un vidage de tableur de 200 lignes qui vous laisse deviner par où commencer. Le livrable est conçu pour être mis en œuvre, que vous fassiez le travail vous-même ou que vous le confiiez à un développeur.
Pour chaque problème, nous exposons explicitement trois choses :
- Ce qui ne va pas, le problème précis, décrit dans des termes que vous pouvez reconnaître dans votre propre boutique.
- Pourquoi c'est important pour le trafic, la raison concrète pour laquelle cela affecte l'indexation, le crawl ou le positionnement, afin que vous compreniez les enjeux plutôt qu'une simple étiquette.
- Exactement quoi corriger en premier, l'étape concrète suivante, et non une recommandation vague.
Les constats sont classés selon le rapport impact / effort. Cela signifie que les éléments à fort levier et faible effort sont nettement séparés des chantiers structurels plus lourds, de sorte que vous pouvez traiter immédiatement les gains rapides et planifier le reste en toute confiance. Cet ordonnancement est délibéré : sur une boutique active, connaître la séquence a souvent plus de valeur que la simple liste des problèmes.
Lorsque cela aide réellement, nous nommons l'élément PrestaShop précis concerné, le réglage de configuration, le contrôleur ou le template exact qui requiert une attention. Par exemple, si un problème de canonical remonte à la façon dont un contrôleur de catégorie construit ses URL, ou si une lacune de données structurées se loge dans un .tpl particulier, nous le désignons directement. Cette précision permet à votre développeur de passer directement à la correction au lieu de redécouvrir le diagnostic.
Le plan est rédigé pour se suffire à lui-même. Vous n'êtes jamais laissé avec des constats que vous ne pouvez pas interpréter, et il n'y a aucune obligation de faire appel à quiconque pour en comprendre le sens, c'est un document que vous pouvez exécuter directement.
Le démarrage est volontairement léger de votre côté. Nous commençons par une brève étape de cadrage pour confirmer les éléments qui structurent toute la revue : vos objectifs, vos marchés cibles et les langues que sert votre boutique. Cela compte car les priorités SEO diffèrent sensiblement entre, disons, une boutique monolingue domestique et un catalogue multilingue où hreflang et le ciblage géographique sont des préoccupations centrales.
Une fois cela convenu, nous menons la revue sur votre boutique en ligne et vos données Search Console. Travailler sur la boutique réelle, plutôt que sur une copie de préproduction ou un crawl synthétique, est ce qui permet aux constats de refléter votre indexation réelle, vos vraies URL et vos données de requêtes réelles.
Combien de temps cela prend
La plupart des audits sont réalisés rapidement une fois l'accès disponible. Nous confirmons le délai prévu avec vous après la brève étape de cadrage, car le délai réaliste dépend de la taille de votre catalogue et du périmètre choisi. Une boutique monolingue ciblée est plus rapide à examiner qu'une grande boutique multilingue.
Ce que vous devez préparer
Rien de technique. Vous n'avez pas besoin de rassembler des rapports, d'exporter des données ou de modifier le moindre réglage à l'avance. Pour démarrer, les deux choses utiles sont :
- Un accès en lecture seule à votre back-office, suffisant pour inspecter la configuration, les modules et la structure d'URL sans rien altérer.
- Un accès à votre propriété Search Console, afin que nous puissions voir comment Google explore et indexe actuellement le site.
L'accès en lecture seule est délibéré : il permet à un spécialiste de voir exactement comment votre boutique est configurée tout en vous laissant le contrôle total, sans aucun risque de modification pendant la revue. Si vous préférez restreindre davantage les accès, nous pouvons travailler dans ce cadre.
L'Audit SEO est en soi un diagnostic. Le livrable est un plan priorisé sur lequel vous, ou n'importe quel développeur compétent, pouvez agir de manière autonome. Nous le rédigeons délibérément pour qu'il se suffise à lui-même : chaque problème explique ce qui ne va pas, pourquoi c'est important et quoi faire, avec le réglage, le contrôleur ou le template PrestaShop précis nommé là où cela aide. Vous ne restez pas dépendant de nous pour interpréter les résultats.
Cela dit, beaucoup de propriétaires de boutique préfèrent ne pas mettre en œuvre les corrections eux-mêmes, et si vous souhaitez que nous fassions le travail, nous le pouvons. Il existe deux grandes voies, et nous choisissons celle qui correspond réellement au problème :
- Nos propres modules PrestaShop, lorsqu'un problème récurrent ou structurel se résout mieux par un véritable outil (par exemple gérer à grande échelle les canonical, les sitemaps, les données structurées ou les redirections), et qu'un module est la bonne réponse à long terme plutôt qu'une modification ponctuelle.
- Travail de remédiation pratique, des modifications directes des templates, de la configuration ou du code lorsqu'une correction ciblée est ce qu'il faut.
Tout travail de mise en œuvre est chiffré séparément, une fois que l'audit a clarifié les priorités. Nous pensons que c'est l'ordre honnête de procéder : vous voyez d'abord le diagnostic, comprenez ce qu'il faut réellement faire, et décidez seulement ensuite si vous nous confiez le travail ou si vous l'emmenez ailleurs.
Il n'y a aucune obligation d'acheter quoi que ce soit d'autre. L'audit est complet et utile en lui-même, le plan vous appartient et vous l'exécutez comme bon vous semble. Proposer la mise en œuvre est un service pour les propriétaires qui souhaitent qu'une seule équipe mène le travail jusqu'au bout, et non une condition pour que l'audit ait de la valeur.
L'Audit de Sécurité PrestaShop est une revue concrète de votre boutique réelle, centrée sur les menaces qui frappent réellement les boutiques PrestaShop en pratique plutôt que sur une checklist de conformité générique. La popularité de PrestaShop en fait une cible fréquente, et les schémas d'attaque sont assez spécifiques, l'audit se concentre donc là où réside le risque réel. Un spécialiste examine les domaines suivants :
Analyse de vulnérabilités
Nous vérifions la présence d'un cœur, de modules et d'une version PHP obsolètes porteurs de CVE connues. Les modules tiers non à jour sont l'un des points d'entrée les plus courants sur PrestaShop, car un seul module négligé peut exposer toute la boutique, même lorsque le cœur est à jour.
Détection de malwares & Magecart
Nous recherchons les skimmers injectés, web-shells et fichiers altérés, les injections de type Magecart qui volent les cartes et les portes dérobées ciblant les flux de paiement et de commande. C'est un schéma que nous traitons régulièrement, de sorte que la revue se fonde sur ce à quoi ces compromissions ressemblent réellement dans le système de fichiers et la base de données, et non sur une simple correspondance de signatures.
Exposition aux injections
Nous évaluons les surfaces d'injection SQL et de templates Smarty (RCE) dans les modules et les overrides, les endroits où une entrée non fiable atteint une requête ou un template et peut être transformée en exécution de code à distance.
Durcissement de l'admin & 2FA
Nous examinons les accès au back-office : comptes employés, protection de connexion et authentification à deux facteurs. Des identifiants admin faibles ou partagés et un back-office non protégé sont une cause récurrente de compromissions qui n'ont rien à voir avec des failles de code.
Sauvegarde & restauration
Enfin, nous vérifions si vous pourriez réellement restaurer proprement après un incident. Que des sauvegardes existent, sont récentes et sont véritablement utilisables. Une sauvegarde que vous n'avez jamais testée est un risque, pas un filet de sécurité.
Parce qu'un spécialiste inspecte votre boutique réelle, les constats reflètent votre exposition et votre configuration réelles plutôt qu'une liste théorique de choses qui pourraient mal tourner.
Pour une vision complète, nous demandons un accès en lecture seule au back-office et, lorsque c'est possible, un accès en lecture aux fichiers et aux logs. Cette combinaison suffit à inspecter la boutique en profondeur, versions des modules, configuration, système de fichiers et schémas d'accès dans vos logs, sans rien modifier. Les logs en particulier sont l'endroit où apparaissent souvent les signes d'une compromission active ou d'attaques de sondage, de sorte qu'un accès en lecture améliore sensiblement ce que l'audit peut voir.
Côté sécurité, le point clé est simple : nous ne modifions jamais votre boutique pendant un audit. Toute la revue est observationnelle. Rien n'est patché, supprimé ou reconfiguré pendant que nous examinons, ce qui signifie qu'il n'y a aucun risque que l'audit lui-même casse votre boutique ou perturbe les acheteurs.
Travailler dans un périmètre qui vous convient
L'accès peut être adapté à votre niveau de confort. Si vous préférez ne pas accorder l'accès aux fichiers ou aux logs, nous pouvons travailler dans un périmètre plus restreint, par exemple une analyse externe combinée à une revue guidée du back-office, où vous restez aux commandes et où nous indiquons quoi vérifier. L'audit reste utile ainsi ; un accès plus profond lui permet simplement d'en voir davantage.
Si nous détectons une compromission active
Si la revue met au jour une compromission active, nous vous le disons immédiatement, nous n'attendons pas la fin pour livrer un rapport. Nous décrivons alors des étapes de confinement sûres avant toute autre chose, afin que la priorité devienne de limiter les dégâts et de protéger les données clients et de paiement plutôt que de poursuivre une revue tranquille d'une boutique activement exploitée. Gérer un incident calmement et dans le bon ordre fait partie des raisons pour lesquelles l'audit est en lecture seule par défaut : nous voulons comprendre pleinement la situation avant qu'aucune modification ne soit faite.
De l'Audit de Sécurité, vous recevez un plan de remédiation priorisé, rédigé en langage clair. Pour chaque problème, nous exposons clairement trois choses :
- Ce qui est exposé, la faiblesse précise, décrite de façon à ce que vous puissiez la reconnaître dans votre propre boutique.
- Quelle est sa gravité, une note de gravité claire, afin qu'une suggestion mineure de durcissement ne soit jamais confondue avec une véritable urgence.
- Exactement quoi corriger en premier, l'étape concrète suivante, avec un détail pratique plutôt qu'un avertissement vague.
Les problèmes critiques, tout ce qui est activement exploitable, sont signalés tout en haut avec des étapes concrètes, afin que les problèmes les plus dangereux soient impossibles à manquer et qu'il n'y ait aucune ambiguïté sur le point de départ. Cet ordonnancement compte : en sécurité, la séquence dans laquelle vous agissez fait souvent la différence entre un problème contenu et un incident grave.
Durcir pour l'avenir, pas seulement un correctif ponctuel
Au-delà de corriger ce qui ne va pas aujourd'hui, vous recevez aussi des recommandations de durcissement concrètes visant à rendre la boutique plus résiliente à l'avenir. Elles couvrent généralement :
- L'authentification à deux facteurs sur les comptes du back-office.
- Le verrouillage de l'admin. Restreindre qui peut atteindre le back-office et comment.
- La politique de sauvegarde, s'assurer que vous disposez de sauvegardes récentes, testées et véritablement restaurables.
L'intention est que la boutique se retrouve plus sûre en posture permanente, et non simplement patchée une fois puis laissée dériver vers la même exposition. Le plan est rédigé pour que vous ou votre développeur puissiez agir directement, avec les éléments urgents nettement séparés des améliorations à plus long terme.
L'Audit de Sécurité livre le diagnostic et le plan, un compte rendu clair, classé par gravité, de ce qui est exposé et de ce qu'il faut faire. Ce livrable se suffit à lui-même : vous, ou n'importe quel développeur de confiance, pouvez agir directement dessus.
Si vous souhaitez que le travail soit fait plutôt que simplement documenté, nous pouvons réaliser la remédiation pratique comme une prestation distincte et cadrée. Selon ce que l'audit révèle, cela comprend généralement :
- Nettoyer une infection, supprimer les skimmers injectés, les web-shells et les fichiers altérés, et retracer comment l'attaquant est entré afin que la porte soit réellement fermée.
- Patcher les modules, mettre à jour ou corriger les modules, le cœur ou les overrides vulnérables porteurs de problèmes connus.
- Durcir l'admin, verrouiller les accès au back-office, les comptes employés et la protection de connexion.
Garder la remédiation séparée de l'audit est délibéré. L'audit est observationnel et en lecture seule, de sorte que le diagnostic n'est jamais teinté par la tentation de commencer à modifier des choses en cours de revue ; la remédiation est ensuite cadrée selon des priorités claires et convenues.
En cas de compromission active
Pour une compromission active, nous priorisons d'abord le confinement. Avant tout nettoyage ou correctif plus large, la préoccupation immédiate est de limiter les dégâts et de protéger les données clients et de paiement. Ce n'est qu'une fois la situation contenue que le reste de la remédiation se poursuit dans un ordre réfléchi. Il n'y a aucune obligation de prendre la voie de la remédiation, mais si vous souhaitez qu'une seule équipe mène le problème de bout en bout, du diagnostic à la correction, cette option existe.
L'Audit de Performance PrestaShop mesure votre boutique réelle dans des conditions réalistes, et non un score synthétique unique pris isolément. Un chiffre de laboratoire ponctuel vous dit très peu de choses sur le comportement de la boutique pour les vrais acheteurs et pour Googlebot ; l'audit est conçu pour trouver les véritables goulets d'étranglement. Un spécialiste examine les couches suivantes :
Profilage PHP
Nous profilons le back-end pour trouver les hooks, modules et chemins de code lents qui gonflent le temps de réponse serveur. Sur PrestaShop, un seul module lourd branché sur chaque page, ou une opération coûteuse s'exécutant à l'affichage des catégories et des produits, est une cause très courante de Time To First Byte poussif, et c'est le profilage qui le localise précisément plutôt que de deviner.
Base de données
Nous recherchons les requêtes lentes et N+1, les index manquants et les jointures lourdes. À mesure que les catalogues et l'historique des commandes grandissent, des requêtes acceptables au lancement peuvent silencieusement devenir le coût dominant d'une page, et la correction est souvent un index précis plutôt qu'un changement global.
Cache & CCC
Nous examinons votre pile de cache de bout en bout : la compilation Smarty, Redis, le cache pleine page et les réglages Combine-Compress-Cache (CCC). Un cache mal configuré est l'un des domaines de performance à plus fort levier sur PrestaShop, et il est fréquemment laissé dans un état sous-optimal.
Core Web Vitals
Nous évaluons les LCP, CLS et INP tels que Google les mesure réellement, les métriques de terrain qui alimentent l'expérience de page, plutôt qu'un simple instantané de laboratoire. Largest Contentful Paint, Cumulative Layout Shift et Interaction to Next Paint pointent chacun vers des problèmes sous-jacents différents, des ressources bloquant le rendu aux mises en page instables.
Pipeline d'images & CDN
Enfin, nous examinons le pipeline d'images et la diffusion edge : les formats modernes (WebP/AVIF), le lazy-loading, et le fait qu'un CDN serve ou non les ressources efficacement depuis l'edge. Les images sont généralement la partie la plus lourde d'une page de boutique, donc c'est souvent là que se situent les plus grands gains concrets.
Parce que nous mesurons votre boutique réelle à travers ces couches, les constats reflètent les performances réelles de votre boutique plutôt qu'un benchmark théorique.
De l'Audit de Performance, vous recevez un plan priorisé, rédigé en langage clair. Pour chaque constat, nous exposons clairement trois choses :
- Ce qui ralentit la boutique, le goulet d'étranglement précis, en termes concrets.
- Pourquoi c'est important, l'effet concret sur le temps de chargement réel, la réponse serveur et l'expérience des acheteurs et des robots.
- Exactement quoi corriger en premier, l'étape suivante, et non une recommandation vague.
Les constats sont classés selon le rapport impact / effort, de sorte que les changements qui apportent le plus de vitesse pour le moins de travail sont nettement séparés des chantiers d'optimisation plus lourds. Sur une boutique en production, cet ordonnancement est souvent la partie la plus utile du rapport : il vous dit non seulement ce qui ne va pas, mais aussi la séquence dans laquelle l'aborder.
Nous nommons le coupable
Lorsqu'un module, une requête ou un réglage précis est en cause, nous le nommons. Si le hook d'un module particulier gonfle le temps de réponse, qu'une requête précise manque d'index, ou qu'un réglage CCC ou de cache est mal configuré, nous le désignons directement. Cette précision signifie que vous, ou votre développeur, pouvez agir sur la cause exacte au lieu de deviner et de modifier des choses au hasard, ce qui, sur une installation PrestaShop complexe, peut facilement aggraver les choses.
De la vraie vitesse, pas un score de vanité
Le but, tout au long, est la vitesse réelle pour les acheteurs et pour Googlebot, des pages plus rapides qui se chargent véritablement plus vite pour les visiteurs et sont explorées plus efficacement, plutôt que de simplement faire passer un badge Lighthouse au vert. Une boutique peut bien noter dans un test de laboratoire et rester lente sur le terrain ; l'audit est rédigé pour améliorer l'expérience qui compte réellement, avec un rapport structuré pour que le plan puisse être exécuté directement.
Non. L'audit est conçu pour ne pas perturber vos acheteurs. Le profilage et la mesure sont menés de manière à garder la boutique en ligne stable, généralement une inspection en lecture seule combinée à une mesure contrôlée plutôt que quoi que ce soit qui charge ou sollicite le site au détriment des vrais visiteurs.
Les deux principes qui le rendent sûr sont simples :
- L'inspection est observationnelle. Examiner la configuration, profiler les chemins de code et étudier les requêtes sont des activités en lecture seule, nous regardons comment la boutique se comporte, pas comment elle fonctionne.
- La mesure est contrôlée. Toute mesure active est faite délibérément et avec mesure, et non comme un test de charge incontrôlé pointé vers votre checkout de production pendant les heures d'ouverture.
Vous gardez le contrôle des modifications
Crucialement, nous ne déployons aucune modification pendant l'audit. L'audit produit un plan ; il ne touche pas à votre configuration, vos templates ou votre code en ligne. Cela signifie que vous gardez le contrôle total de ce qui est mis en œuvre et quand, rien n'est altéré sur votre boutique sans votre décision. Vous pouvez examiner les recommandations, choisir lesquelles appliquer, et les planifier sur une fenêtre calme si vous préférez. Séparer ainsi la mesure de la mise en œuvre est exactement ce qui permet à l'audit de se dérouler en toute sécurité sur une boutique en activité.
Le démarrage est léger de votre côté. Nous commençons par un bref cadrage pour confirmer vos pires points de douleur, car le travail de performance est bien plus efficace lorsqu'il vise les pages et les moments qui font réellement mal. Les domaines que nous précisons généralement sont :
- Les pages catégories lentes, souvent là où la navigation à facettes, les filtres et les grandes grilles de produits se combinent pour plomber le temps de réponse.
- Le checkout. Où la lenteur coûte directement des ventes et frustre des clients prêts à acheter.
- L'admin / back-office, un traitement des commandes et une gestion du catalogue poussifs qui grignotent le temps de votre équipe.
- Le comportement en charge de pointe, comment la boutique tient lors des pics de trafic, des événements promotionnels ou des campagnes.
Savoir lequel de ces points compte le plus pour vous oriente l'effort de mesure, afin que les constats répondent à vos vrais problèmes plutôt qu'à un profil générique.
Une fois le périmètre convenu, nous mesurons sur votre boutique en ligne, la boutique réelle dans des conditions réelles, ce qui est la seule façon pour que les chiffres reflètent ce que vos acheteurs et Googlebot vivent réellement.
Combien de temps cela prend
La plupart des audits sont réalisés rapidement une fois l'accès disponible. Nous confirmons le délai prévu avec vous après la brève étape de cadrage, puisque le délai réaliste dépend de la taille de votre boutique et de l'étendue de ce que nous mesurons. La conversation de cadrage est brève et constitue le moment naturel où nous convenons à la fois du focus et du calendrier.
L'Audit UI/UX PrestaShop examine votre boutique réelle, en ligne telle qu'un acheteur réel l'expérimente, et non une checklist générique appliquée à une capture d'écran. Nous parcourons le parcours complet, de l'arrivée sur une page catégorie jusqu'à la finalisation d'une commande, et signalons chaque point où l'interface ajoute de la friction, de la confusion ou de l'hésitation. La revue s'articule autour des domaines qui comptent le plus pour un catalogue PrestaShop :
- Ergonomie, la navigation, la recherche interne et la clarté de vos pages catégories et produits. Nous vérifions si les menus reflètent la façon dont les clients achètent réellement, si la recherche renvoie des résultats utiles, et si les pages produits répondent aux questions que se pose un acheteur avant de s'engager.
- Mobile, l'expérience sur les appareils que la majeure partie de votre trafic utilise réellement. Nous testons les zones tactiles, le comportement de l'ajout au panier collant, le chargement des images et l'ergonomie des formulaires sur petits écrans, là où la plupart des thèmes PrestaShop flanchent discrètement.
- Parcours produit & checkout, les moments précis où les acheteurs hésitent, se perdent ou abandonnent. Les checkouts en une page et multi-étapes de PrestaShop ont chacun leurs pièges d'abandon connus : création de compte forcée, frais de port flous, frais surprises et sélecteurs de combinaisons/attributs déroutants.
- Accessibilité, la conformité EAA / WCAG, de plus en plus attendue des boutiques de l'UE. Les problèmes d'accessibilité sont aussi des problèmes d'ergonomie, donc cela recoupe largement la conversion.
- Signaux de confiance, les avis, garanties et la clarté de vos informations de livraison et de retour. Un contenu de confiance absent ou enfoui est une cause courante et peu coûteuse de ventes perdues.
Pourquoi c'est important
La plupart des problèmes de conversion PrestaShop ne sont pas des défauts de conception profonds du thème. Ce sont de petits points de friction corrigeables qui se cumulent sur des milliers de sessions. Une retouche de thème enfant, une étape de checkout réordonnée ou un message de livraison plus clair peuvent lever une barrière qui coûtait silencieusement des commandes.
Cet audit s'adresse aux propriétaires de boutique qui soupçonnent que leur trafic est correct mais que leur conversion ne l'est pas, et qui veulent une évaluation honnête, vue à hauteur d'acheteur, plutôt qu'un argumentaire de refonte. Nous utilisons votre catalogue réel, votre thème réel et vos parcours clients réels, de sorte que les constats s'appliquent directement à votre boutique.
Vous recevez un plan priorisé, rédigé en langage clair qui pointe exactement où les acheteurs hésitent ou abandonnent, pourquoi cela se produit, et précisément quoi changer en premier. Il est rédigé pour être mis en œuvre, ce n'est pas un essai de design ni une liste d'opinions subjectives sur les couleurs et les polices.
Ce que contient le livrable
- Des recommandations concrètes et spécifiques à PrestaShop, réglages de thème, structure de page, étapes de checkout, configuration de modules et placement de contenu. Lorsque la correction se situe dans un template de thème précis, un écran de configuration ou un réglage de catégorie, nous le disons, afin que votre développeur (ou le nôtre) puisse agir sans deviner.
- Le raisonnement derrière chaque problème, ce que l'acheteur expérimente, pourquoi cela provoque hésitation ou abandon, et à quoi ressemble une meilleure version. Comprendre le “pourquoi” signifie que votre équipe peut appliquer le même raisonnement aux changements futurs.
- Un classement clair. Les recommandations sont ordonnées pour que vous puissiez commencer par les correctifs à plus fort impact et descendre, plutôt que de dépenser de l'effort sur des changements cosmétiques qui ne bougent rien.
Pourquoi c'est important
Une longue liste non classée de “choses que vous pourriez améliorer” tend à rester inutilisée. En se concentrant sur les changements qui augmentent la conversion et répondent aux obligations d'accessibilité, et en les ordonnant pour que les plus grands gains viennent en premier. Le plan devient quelque chose que vous pouvez véritablement exécuter, dans l'ordre, avec un temps et un budget limités. Les recommandations sont cadrées selon la manière PrestaShop de faire les choses : overrides de thème enfant, configuration native et modules bien choisis plutôt que des bricolages fragiles.
Cela convient aux propriétaires qui veulent une étape suivante claire plutôt qu'un vague sentiment que “le site pourrait être mieux”. Vous terminez avec une feuille de route de changements précis et défendables, et une idée de ceux à traiter cette semaine par rapport à ceux à traiter ce trimestre.
Oui. L'accessibilité fait partie intégrante de l'Audit UI/UX, et non d'une option supplémentaire. La directive européenne sur l'accessibilité (EAA) s'applique à de nombreuses boutiques en ligne vendant à des consommateurs de l'UE, et la respecter est de plus en plus attendu plutôt qu'optionnel. Nous vérifions votre boutique au regard des critères WCAG pertinents et vous donnons une image claire et honnête de votre situation actuelle.
Ce que nous vérifions
- Navigation au clavier, si un acheteur peut parcourir les menus, les filtres, les options produits et le checkout au seul clavier, sans rester piégé ni perdre sa place.
- Contraste, le texte et les éléments interactifs par rapport à leur arrière-plan, afin que le contenu soit lisible pour les personnes malvoyantes et dans de mauvaises conditions d'éclairage.
- Étiquettes, les champs de formulaire, boutons et contrôles correctement nommés afin que les technologies d'assistance puissent les annoncer. Les formulaires de checkout et de contact PrestaShop sont un point faible courant ici.
- Ordre de focus, un chemin de focus logique et visible afin que les utilisateurs du clavier et des lecteurs d'écran suivent la page dans une séquence sensée.
- Formulaires, les messages d'erreur, l'indication des champs requis et la clarté des saisies, en particulier lors de l'inscription et du checkout.
Pourquoi c'est important
Vous obtenez une vue claire de votre situation et des correctifs pratiques qui soutiennent la conformité. Crucialement, la plupart de ces correctifs améliorent aussi l'ergonomie pour tout le monde : des étiquettes plus claires, un meilleur contraste et un ordre de focus sensé réduisent la friction pour tous les acheteurs, pas seulement ceux qui utilisent des technologies d'assistance. Dans PrestaShop, beaucoup d'entre eux sont adressables via des modifications de template et de CSS du thème enfant plutôt que des éditions du cœur, ce qui les rend sûrs à maintenir au fil des mises à jour.
Cela convient bien aux boutiques tournées vers l'UE qui veulent comprendre leur exposition et agir méthodiquement. Nous vous donnons une évaluation honnête des lacunes et des étapes concrètes qui soutiennent la conformité. Sans surévaluer ce qu'un seul audit peut certifier.
L'Audit d'Hébergement & Infrastructure PrestaShop évalue votre hébergement face à la charge réelle d'une boutique, comment votre boutique se comporte sous le trafic et l'activité d'administration réels, plutôt que face aux promesses de fiche technique d'un plan d'hébergement. Un serveur “rapide” sur le papier peut quand même servir des pages lentes une fois qu'un catalogue PrestaShop complet, des modules et des tâches de back-office tournent dessus. Nous examinons les couches qui déterminent réellement la vitesse, la stabilité et la résilience :
- Version PHP & ressources serveur, CPU, mémoire et limites par rapport à votre trafic. Nous vérifions si votre version PHP est à jour et supportée, et si les limites mémoire, le temps d'exécution et la capacité de workers correspondent à la charge que votre boutique subit réellement.
- Couches de cache, OPcache, Redis, cache pleine page et leur configuration. Un cache mal configuré ou absent est l'une des causes les plus courantes de pages PrestaShop lentes, et nous vérifions que chaque couche est présente et fait son travail.
- CDN & edge, diffusion, taux de hit de cache et protection de l'origine. Nous regardons si les ressources statiques et les pages sont servies depuis l'edge, à quelle fréquence le cache est réellement touché, et si votre origine est protégée.
- TLS / HTTP, certificat, HTTP/2-3 et en-têtes de sécurité. Des protocoles obsolètes et des en-têtes manquants coûtent à la fois en performance et en sécurité.
- Sauvegardes, bascule & uptime, si vous pourriez survivre à une panne ou à un mauvais déploiement. Nous évaluons si des sauvegardes existent, sont récentes et sont réellement restaurables, et ce qui se passe quand quelque chose tombe en panne.
Pourquoi c'est important
L'hébergement se trouve sous tout le reste : aucune optimisation front-end ne sauve une boutique sur un serveur sous-dimensionné ou mal configuré. PrestaShop en particulier est sensible à la configuration PHP, au cache et à la performance de la base de données, de sorte que de petites lacunes d'infrastructure ressortent en pages catégories lentes, admin poussif et ventes perdues lors des pics de trafic. Cet audit s'adresse aux propriétaires qui soupçonnent que leur hébergeur fait partie du problème, ou qui veulent simplement savoir, honnêtement, si leur configuration actuelle peut porter là où la boutique se dirige.
Vous recevez un plan priorisé, rédigé en langage clair pour rendre votre boutique plus rapide, plus sûre et plus résiliente. Avec des indications claires sur ce qu'il faut changer au niveau de l'hébergement et, tout aussi important, sur ce qui en vaut réellement le coût. Il est rédigé pour qu'un propriétaire non technique comprenne les arbitrages et qu'une équipe technique puisse agir dessus.
Ce que contient le livrable
- Des actions précises et classées, des correctifs de configuration (réglages PHP, couches de cache, en-têtes) aux changements structurels plus lourds, ordonnés pour que les éléments à plus fort impact et meilleur rapport qualité-prix viennent en premier.
- Un cadrage honnête des coûts, nous séparons les changements qui se rentabilisent de ceux qui sont du confort, afin que vous ne surinvestissiez pas dans une infrastructure dont votre boutique n'a pas encore besoin.
- Un verdict clair sur votre hébergeur actuel, si votre hébergement vous freine vraiment, nous le disons clairement et expliquons à quoi ressemble une meilleure configuration pour votre taille de boutique, plutôt que de vous laisser deviner.
Pourquoi c'est important
Les décisions d'infrastructure sont faciles à rater dans les deux sens : payer pour une capacité que vous n'utiliserez jamais, ou survivre tant bien que mal sur un hébergeur qui bride chaque journée chargée. Le plan est conçu pour trancher cela, concret, classé et adapté à votre trafic et à la taille de votre catalogue réels. Parce qu'il est cadré en langage clair avec le raisonnement attaché, vous pouvez prendre des décisions confiantes sur où dépenser et où laisser les choses telles quelles.
Cela convient aux propriétaires de boutique qui veulent de la clarté avant d'engager un budget. Qu'il s'agisse d'optimiser l'hébergeur qu'ils ont ou de comprendre ce qu'il faut rechercher dans un meilleur. Vous terminez avec une feuille de route défendable plutôt qu'un argumentaire de vente.
L'audit est délibérément neutre vis-à-vis des fournisseurs. Notre rôle est de vous dire, honnêtement, si votre hébergement actuel convient à votre trafic et où il pèche, pas de vous orienter vers un fournisseur particulier. Vous n'êtes jamais poussé à changer d'hébergeur pour “réussir” l'audit, et il n'y a aucun agenda caché de parrainage derrière les recommandations.
Comment ça marche
- Nous évaluons d'abord ce que vous avez, l'audit mesure votre configuration existante face à votre trafic et à la taille de votre boutique réels, de sorte que le point de départ est toujours “cet hébergeur vous convient-il”, et non “quel hébergeur devrions-nous vous vendre”.
- Si une migration est réellement justifiée, nous expliquons pourquoi, nous exposons les raisons précises pour lesquelles votre hébergement actuel pèche et ce qu'il faut rechercher dans un meilleur, afin que vous puissiez évaluer les options sur le fond.
- La migration est une prestation distincte et cadrée, si vous décidez de migrer, nous pouvons la réaliser comme un engagement clairement défini. Elle n'est jamais intégrée à l'audit ni utilisée comme une condition de celui-ci.
Pourquoi c'est important
Les migrations PrestaShop comportent un risque réel, incompatibilités de versions PHP et de base de données, dépendances de modules cassées, configuration de cache et d'URL, et indisponibilité si la bascule n'est pas planifiée avec soin. C'est exactement pourquoi la recommandation de migrer (ou non) doit être honnête et indépendante de tout mobile commercial. Un audit neutre signifie que vous pouvez faire confiance au verdict : si rester en place est le bon choix, nous le dirons ; si migrer est justifié, vous comprendrez précisément pourquoi et ce qu'implique une migration sûre.
Cela convient aux propriétaires qui veulent une réponse franche sur leur hébergement sans la pression habituelle de changer. Vous obtenez de la clarté sur l'adéquation de votre hébergeur à vos besoins, et le contrôle total sur ce que vous faites ensuite, le cas échéant.
C'est le côté technique des flux et du tracking, cadré délibérément à part de la gestion de campagnes. L'audit vérifie si les données qui alimentent Google Merchant Center, GA4 et Google Ads sont complètes, exactes et fiables, car tout ce qui se trouve en aval (fiches gratuites, annonces Shopping, reporting de performance) dépend de la solidité de cette fondation. Nous examinons :
- Qualité du flux Merchant, attributs requis, titres, GTIN, refus et problèmes de politique. Nous vérifions que les produits portent les attributs attendus par Google, que les titres sont structurés pour correspondre à la façon dont les gens recherchent, et que les refus ou signalements de politique ne suppriment pas discrètement une partie de votre catalogue.
- Tracking GA4 / Ads, déclenchement des conversions, déduplication, et fiabilité de vos chiffres. Nous vérifions que les conversions se déclenchent réellement, qu'elles ne sont pas comptées en double, et que les chiffres sur lesquels vous fondez vos décisions reflètent la réalité.
- Schéma Product / Offer, les données structurées qui sous-tendent les fiches gratuites et les résultats enrichis. Un balisage
ProductetOffercorrect aide votre catalogue à se qualifier pour les fiches Shopping gratuites et les résultats enrichis dans la recherche. - Qualité des données produit, les données du catalogue qui alimentent à la fois votre flux et votre SEO on-site. Les mêmes données produit PrestaShop pilotent le flux et la vitrine, donc les nettoyer améliore les deux à la fois.
Pourquoi c'est important
Les problèmes de flux et de tracking sont insidieux parce qu'ils sont invisibles au quotidien : un GTIN manquant, un titre mal formé ou une balise de conversion qui se déclenche deux fois ne génère pas d'erreur, cela distord simplement vos données en silence et réduit votre portée. Dans PrestaShop, les flux sont généralement générés par un module qui mappe les champs du catalogue vers les attributs de Google, et de petites lacunes de mapping se multiplient sur des milliers de produits. Cet audit trouve ces lacunes avant qu'elles ne vous coûtent en visibilité ou ne faussent vos décisions de campagne. Il s'adresse aux propriétaires qui font tourner (ou prévoient de faire tourner) Shopping et veulent avoir confiance dans le fait que les données sous-jacentes sont correctes.
Vous recevez un plan priorisé, rédigé en langage clair pour corriger exactement ce qui bloque votre flux et votre tracking, refus, attributs manquants, conversions cassées ou comptées en double, classé pour que vous traitiez en premier les problèmes affectant le chiffre d'affaires. Il est conçu pour être mis en œuvre dans l'ordre, et non comme un export brut de chaque avertissement émis par Google.
Ce que contient le livrable
- Des correctifs précis et classés. Chaque problème est décrit en langage clair, avec ce qu'il faut changer et où, ordonné par impact pour que les refus et les conversions cassées (ce qui vous coûte réellement en portée ou fausse vos chiffres) viennent en premier.
- Des indications spécifiques à PrestaShop, parce que le flux est généré à partir de votre catalogue, beaucoup de correctifs résident dans les données produit, le mapping d'attributs ou la configuration de modules ; nous désignons l'origine du problème pour qu'il soit corrigé à la source, et non rustiné produit par produit.
- Corrections de tracking, des directives claires sur le déclenchement des conversions et la déduplication pour que les données alimentant GA4 et Ads soient de nouveau fiables.
Pourquoi c'est important
Les problèmes de tracking et de flux faussent silencieusement chaque décision de campagne, vous enchérissez, budgétez et optimisez sur des chiffres erronés, et vous le faites à la fois sur le trafic shopping payant et gratuit. Bien faire les choses se rentabilise donc largement : des données de conversion plus propres signifient des décisions mieux informées partout, et un flux plus sain signifie qu'une plus grande partie de votre catalogue est réellement éligible à l'affichage. Parce que les mêmes données de catalogue alimentent aussi votre SEO on-site, les corriger à la source améliore plus que le seul flux.
Cela convient aux propriétaires qui sentent que leur performance ou leur reporting Shopping “ne colle pas” et veulent corriger la fondation avant de dépenser davantage en campagnes. Vous terminez avec une liste claire et ordonnée de correctifs qui cible en premier les problèmes affectant le chiffre d'affaires.
Cet audit est cadré sur la fondation technique, santé du flux, exactitude du tracking et schéma, et non sur la gestion quotidienne des campagnes ou des enchères. Nous gardons délibérément les deux séparés pour que chacun reçoive le bon type d'attention : l'audit s'assure que vos données sont correctes, ce qui est précisément ce qui rend efficace tout travail de campagne.
Où se situe la limite
- Dans le périmètre : diagnostiquer les refus de flux et les attributs manquants, vérifier le tracking de conversion et la déduplication, et contrôler les données structurées
Product/Offer, la plomberie sur laquelle repose chaque campagne. - Hors périmètre : la gestion continue des enchères, l'allocation de budget, la structure de campagne et l'optimisation quotidienne des campagnes Shopping ou Search en cours.
Pourquoi c'est important
Une gestion de campagne bâtie sur une fondation cassée gaspille la dépense : si les conversions sont mal suivies ou si la moitié de votre catalogue est refusée, même une gestion d'enchères experte optimise sur de mauvais signaux. Mettre d'abord la fondation au carré est ce qui rend efficace le travail de campagne, c'est la différence entre optimiser une performance réelle et courir après le bruit. Beaucoup de propriétaires de boutique découvrent que corriger les problèmes de flux et de tracking améliore les résultats avant même qu'aucun changement de campagne ne soit fait.
Si vous souhaitez une aide continue sur les campagnes, nous pouvons en discuter séparément, c'est simplement un engagement différent avec une cadence différente. Cela garde l'audit honnête et focalisé : un bilan de santé technique ponctuel sur lequel vous pouvez agir, que vous gériez vos campagnes vous-même, fassiez appel à une autre agence, ou nous demandiez plus tard de les reprendre. Le résultat est une base solide sur laquelle tout effort de campagne, interne ou externe, peut bâtir en toute confiance.
L'Audit de Conversion B2C examine votre boutique réelle, en ligne, sous l'angle d'une boutique grand public dont la mission est de transformer les visiteurs existants en acheteurs. Nous ne partons pas d'une checklist générique ; nous partons de votre trafic réel, de vos vraies pages produits et de votre vrai checkout, puis nous parcourons le parcours d'un acheteur et trouvons où le chiffre d'affaires fuit. Parce que l'objectif est le taux de conversion plutôt que la finition globale, chaque observation est rattachée à un abandon mesurable.
Ce que nous examinons
- L'entonnoir, là où les visiteurs décrochent entre l'arrivée, la catégorie, le produit, le panier et le checkout. Sur PrestaShop, cela signifie souvent des pages catégories lentes ou chargées, des chemins internes faibles depuis les pages blog/landing vers les pages produits, et le classique précipice panier-vers-checkout.
- Conversion en page produit, qualité et zoom des visuels, clarté des prix, messages de stock et de livraison, urgence, et friction à l'ajout au panier. Nous regardons comment votre thème affiche le bloc d'achat et si la hiérarchie de
product.tplplace les informations décisives au-dessus de la ligne de flottaison. - Mobile, l'expérience là où la majorité du trafic grand public convertit réellement (ou non). Nous vérifions les zones tactiles, l'ajout au panier collant, le poids des images, et si le checkout mobile est véritablement utilisable plutôt qu'une mise en page desktop rétrécie.
- Confiance & preuve sociale, avis, notes, garanties, réassurance sur les retours et signaux de sécurité de paiement placés aux points de décision exacts où un consommateur hésite.
- Friction au checkout & retours, le point d'abandon final et de plus grande valeur. Nous examinons le flux de checkout en une page, la création de compte forcée, les options de paiement, les coûts inattendus apparaissant tardivement, et la clarté avec laquelle les retours sont communiqués.
Pourquoi c'est important
La plupart des boutiques dépensent beaucoup pour acquérir du trafic puis en perdent une grande part au profit d'une friction corrigeable. Resserrer l'entonnoir monétise des visiteurs que vous avez déjà payés, ce qui est généralement le levier le plus rapide et le moins cher dont vous disposez. PrestaShop ajoute ses propres spécificités, overrides de thème, conflits de modules dans le checkout et comportement CCC/cache affectant la vitesse des pages, et nous en tenons compte plutôt que de vous donner des conseils indépendants de la plateforme.
Cet audit s'adresse aux boutiques PrestaShop grand public qui ont un trafic significatif mais sentent que le taux de conversion est plus bas qu'il ne devrait l'être. Le résultat est diagnostique et priorisé, de sorte que vous pouvez agir d'abord sur les problèmes à plus fort impact plutôt que de deviner.
Ils se recoupent, mais répondent à des questions différentes, et choisir le bon vous fait gagner du temps et de l'argent. L'Audit UI/UX porte sur l'ergonomie et l'accessibilité de toute la boutique, navigation, architecture de l'information, lisibilité, cohérence, normes d'accessibilité et qualité générale de l'expérience pour chaque visiteur, qu'il ait l'intention d'acheter aujourd'hui ou non. L'Audit de Conversion B2C est focalisé au laser sur le chiffre d'affaires : les changements précis d'entonnoir et de page produit qui transforment une plus grande part de votre trafic actuel en commandes.
Comment choisir
- Si votre priorité est d'augmenter le taux de conversion, amener davantage des visiteurs que vous avez déjà à ajouter au panier et finaliser le checkout. L'Audit de Conversion B2C est celui qu'il vous faut. Il cible les fuites de l'entonnoir, la persuasion en page produit, le parcours d'achat mobile, les signaux de confiance au point de décision et l'abandon au checkout.
- Si votre priorité est l'ergonomie et l'accessibilité globales, rendre toute la boutique plus facile, plus claire et plus inclusive sur tous les types de pages, et pas seulement le parcours d'achat, l'Audit UI/UX convient mieux.
En pratique, les deux sont complémentaires. Un problème UI/UX (navigation déroutante, formulaire inaccessible, mise en page incohérente) peut aussi être un problème de conversion, et un constat d'un audit ressort souvent dans l'autre. Mais le cadrage et la priorisation diffèrent : l'audit de conversion classe tout par impact attendu sur le chiffre d'affaires, tandis que l'audit UI/UX classe par qualité d'ergonomie et d'accessibilité.
Sur PrestaShop spécifiquement, les deux audits tiennent compte des overrides de thème, du comportement des modules et de la structure des templates, mais ils regardent des choses différentes, l'audit de conversion le bloc d'achat, le panier et le checkout en une page ; l'audit UI/UX la boutique dans son ensemble. Si vous ne savez pas lequel il vous faut, dites-nous votre objectif : plus de ventes à trafic égal vous oriente vers l'audit de conversion ; une boutique plus propre, plus ergonomique et plus accessible vous oriente vers l'UI/UX.
Vous recevez un plan priorisé, rédigé en langage clair, pour transformer une plus grande part de vos visiteurs existants en acheteurs, des changements concrets et spécifiques à PrestaShop, classés par impact attendu sur la conversion, afin que vous puissiez commencer par les gains qui font bouger le chiffre d'affaires le plus vite. Il est rédigé pour être mis en œuvre, et non rangé dans un tiroir.
Ce que contient le livrable
- Une liste priorisée de constats, chaque problème que nous avons trouvé à travers l'entonnoir, les pages produits, l'expérience mobile, les signaux de confiance et le checkout, ordonné par impact attendu sur la conversion plutôt que par la facilité avec laquelle il a été repéré.
- Des recommandations concrètes et spécifiques à PrestaShop, pas des slogans génériques de bonnes pratiques, mais ce qu'il faut changer dans votre boutique : ajustements de thème/template, configuration, choix de modules, et correctifs de checkout/panier qui collent à la façon dont PrestaShop fonctionne réellement.
- Le raisonnement derrière chaque élément. Pourquoi il vous coûte des commandes et à quoi ressemble une bonne version, afin que votre équipe (ou la nôtre) puisse mettre en œuvre en toute confiance.
- Un point de départ clair, parce que tout est classé, vous pouvez commencer par les changements à plus fort impact et descendre, plutôt que d'essayer de tout faire en même temps.
Pourquoi la priorisation compte
Le travail de conversion est plein de petites retouches possibles, et les faire dans un ordre aléatoire gaspille l'effort. En classant les changements par impact attendu, le plan vous permet de capter d'abord les plus grands gains de chiffre d'affaires et de décider où vous arrêter en fonction des rendements décroissants. Le plan est honnête et mesuré, il identifie où votre trafic actuel fuit et comment le récupérer ; il ne promet pas de résultats précis de trafic, de positionnement ou de chiffre d'affaires, car ceux-ci dépendent de votre marché, de vos produits et de votre exécution.
Il est rédigé en langage clair afin qu'un propriétaire de boutique puisse le comprendre et agir dessus, tout en étant assez précis pour qu'un développeur PrestaShop puisse le mettre en œuvre directement. Si vous le souhaitez, les changements recommandés peuvent ensuite être cadrés comme travail de mise en œuvre.
L'Audit de Préparation B2B vérifie si votre boutique PrestaShop est véritablement prête à vendre en business-to-business. Non seulement si elle peut prendre une commande, mais si elle prend en charge la façon dont les acheteurs professionnels achètent réellement. Vendre aux entreprises introduit des exigences qu'une configuration grand public standard n'a tout simplement pas, et la plupart des boutiques ne découvrent les lacunes qu'après qu'un client professionnel se soit heurté à un mur. Cet audit les trouve d'abord.
Ce que nous évaluons
- Groupes de clients & catalogues restreints, montrer les bons produits et les bons prix aux bons acheteurs. Nous vérifions comment vos groupes de clients PrestaShop sont configurés et si la visibilité du catalogue, la tarification par groupe et les restrictions d'accès se comportent réellement comme prévu.
- Tarification dégressive / de gros, les prix de volume et contractuels correctement appliqués, y compris les prix spécifiques, les remises sur quantité et les tarifs par groupe, afin que les acheteurs en gros voient des prix exacts sans contournements manuels.
- Conditions de paiement net, la facturation et les flux de paiement différé, afin que les comptes professionnels approuvés puissent commander à crédit plutôt que d'être forcés de payer d'avance comme un consommateur.
- Demandes de devis, un flux de tarification négociée superposé au checkout standard, afin que les acheteurs qui ont besoin d'un devis avant de s'engager aient un véritable parcours plutôt que d'abandonner.
- TVA UE & flux de comptes professionnels, validation VIES des numéros de TVA, gestion de l'autoliquidation pour les ventes intra-UE, et un processus sensé d'intégration/inscription B2B pour les nouveaux comptes professionnels.
Pourquoi c'est important
Les acheteurs B2B s'attendent à ce que leur tarification, leurs conditions et leur traitement fiscal soient respectés automatiquement. Si une entreprise doit envoyer un e-mail pour obtenir un prix, ne peut pas obtenir de conditions de paiement net, ou voit une TVA incorrecte au checkout, vous perdez la commande, et souvent la relation. PrestaShop peut prendre en charge tout cela via des fonctionnalités natives, de la configuration, des modules existants et, au besoin, du développement sur mesure, mais cela doit être mis en place délibérément. L'audit met en correspondance chaque exigence avec la situation actuelle de votre boutique.
Cela s'adresse aux marchands PrestaShop qui veulent ajouter ou renforcer un canal B2B en parallèle (ou à la place) des ventes grand public. Le résultat est diagnostique et priorisé ; il vous dit où vous êtes en deçà et ce qu'implique la fermeture de chaque lacune, afin que vous investissiez uniquement dans les capacités dont votre entreprise a réellement besoin.
Vous recevez un plan priorisé, rédigé en langage clair, qui montre exactement où votre boutique est en deçà d'une vraie vente B2B et comment combler chaque lacune, qu'il s'agisse de configuration, d'un module existant ou d'un développement sur mesure. Les constats sont classés afin que vous activiez d'abord les capacités B2B à plus forte valeur, plutôt que d'essayer de tout construire en même temps.
Ce que contient le livrable
- Une analyse des lacunes sur les exigences B2B fondamentales, groupes de clients et catalogues restreints, tarification dégressive/de gros, conditions de paiement net, demandes de devis, et flux de TVA UE/comptes professionnels, comparant ce que les acheteurs professionnels attendent à la façon dont votre boutique PrestaShop se comporte aujourd'hui.
- Un remède clair pour chaque lacune, et surtout, comment la combler : qu'il s'agisse d'un changement de configuration dans PrestaShop, d'un module existant qui la résout déjà, ou d'un développement véritablement sur mesure. Cette distinction compte car elle détermine le coût et l'effort.
- Des priorités classées, les capacités B2B à plus forte valeur d'abord, afin que vous puissiez mettre en place au plus vite les fonctionnalités qui débloquent les commandes professionnelles et différer les bonus.
- Un raisonnement en langage clair. Pourquoi chaque lacune vous coûte des acheteurs professionnels et à quoi ressemble une version fonctionnelle, rédigé pour qu'un propriétaire de boutique puisse décider et qu'un développeur puisse mettre en œuvre.
Pourquoi la priorisation compte
La préparation B2B est rarement un interrupteur unique, c'est un ensemble de capacités interdépendantes, et certaines comptent bien plus pour vos acheteurs spécifiques que d'autres. En classant chaque lacune, le plan vous permet d'activer une vraie vente B2B de façon incrémentale et de ne dépenser que là où cela compte. C'est une évaluation honnête : elle identifie ce qui manque et ce qu'implique la correction, sans promettre de résultats particuliers de ventes ou de croissance, qui dépendent de votre marché et de votre exécution.
L'audit vient délibérément avant tout développement, afin que vous ne vous engagiez que sur la configuration, les modules ou le travail sur mesure dont votre entreprise a véritablement besoin. Si vous décidez de poursuivre, chaque lacune recommandée peut être cadrée comme mise en œuvre, configuration, l'un de nos modules existants, ou développement sur mesure.
Oui. Beaucoup des lacunes qu'un Audit de Préparation B2B met en lumière sont déjà couvertes par nos modules PrestaShop existants, par exemple la tarification par groupe de clients, la validation de TVA et la gestion de l'autoliquidation, et les flux de demande de devis, de sorte que les combler revient souvent à installer et configurer une fonctionnalité éprouvée plutôt qu'à commander du travail sur mesure. Tout ce qui est véritablement spécifique à votre entreprise peut être cadré comme développement sur mesure.
Comment la mise en œuvre suit l'audit
- La configuration d'abord, certaines lacunes se comblent uniquement en configurant correctement PrestaShop : groupes de clients, catalogues restreints, prix spécifiques/dégressifs et règles de taxe. Lorsque c'est le cas, nous le disons, car c'est la voie la moins chère.
- Les modules existants ensuite, lorsqu'une capacité nécessite plus que la configuration native (logique de tarification par groupe, validation de TVA VIES et autoliquidation intra-UE, flux de devis négociés), nos modules existants la couvrent souvent, de sorte que vous obtenez une fonctionnalité testée plutôt que quelque chose construit de zéro.
- Du développement sur mesure là où c'est véritablement nécessaire, si votre processus B2B a des exigences que rien de standard ne satisfait, cette pièce sur mesure peut être cadrée et construite délibérément.
Pourquoi l'audit vient d'abord
Mener l'évaluation avant tout développement signifie que vous n'investissez que dans ce dont votre entreprise a réellement besoin, par ordre de priorité, au lieu d'acheter des modules de manière spéculative ou de commander du travail sur mesure que la configuration aurait pu résoudre. Cela garde la dépense honnête : chaque recommandation est rattachée à une lacune réelle, et vous choisissez jusqu'où aller.
La réponse est donc à la fois diagnostic et réalisation, l'audit vous dit précisément ce qui manque et comment le combler, et nous pouvons ensuite mettre en œuvre les correctifs via la configuration, nos modules existants ou du développement sur mesure selon la situation. Aucune garantie de résultat n'est attachée au développement ; ce à quoi nous nous engageons, c'est à combler les lacunes précises que l'audit identifie.
L'Évaluation d'Adéquation des Modules met en correspondance vos besoins métier réels avec des solutions et vous dit, honnêtement, ce qui convient. Au lieu de partir d'un produit que vous pourriez acheter, elle part de ce que vous avez réellement besoin d'accomplir, puis remonte jusqu'à la bonne réponse, qui est parfois un module, parfois une fonctionnalité native de PrestaShop, et parfois rien du tout.
Comment ça marche
- Vous décrivez le résultat dont vous avez besoin, le problème à résoudre ou la capacité à ajouter, en termes métier. Vous n'avez pas besoin de savoir quel module ou quelle fonctionnalité le fait ; c'est notre travail.
- Nous traduisons cela en exigences concrètes, en transformant un objectif flou (« j'ai besoin d'un meilleur filtrage », « j'ai besoin de ce comportement de checkout ») en critères précis et testables qu'une solution doit satisfaire, y compris la compatibilité de version PrestaShop, les considérations de thème et de performance.
- Nous évaluons les options au regard de ces exigences, les nôtres et les modules tiers, plus la fonctionnalité native de PrestaShop, en confrontant honnêtement chaque candidat à ce dont vous avez réellement besoin plutôt qu'à ce qui est le plus facile à vendre.
- Vous obtenez une matrice d'exigences et une recommandation, une mise en correspondance claire de chaque exigence avec l'option la plus adaptée, avec les arbitrages explicités, afin que la décision soit transparente.
Pourquoi c'est important
Les erreurs PrestaShop les plus coûteuses ne sont généralement pas les modules qui échouent totalement. Ce sont ceux qui fonctionnent à moitié, s'empilent les uns sur les autres, entrent en conflit dans le checkout ou le thème, et s'accumulent silencieusement en une boutique fragile et lente. Acheter la bonne chose une fois évite cela. L'écosystème de PrestaShop est vaste et inégal ; le même résultat peut être atteint de plusieurs façons aux conséquences très différentes pour la maintenabilité, la performance et les mises à niveau de version, et l'évaluation pèse cela plutôt que de simplement faire correspondre des fonctionnalités.
Cela s'adresse aux marchands face à une décision, sur le point d'acheter un module, en train d'évaluer des options concurrentes, ou ne sachant pas s'ils en ont même besoin. Le livrable est de qualité décisionnelle et impartial : il vous dit quoi acheter ou construire, quoi écarter, et pourquoi, avant que vous n'engagiez de l'argent. Il ne promet pas un résultat métier particulier ; il garantit que la solution que vous choisissez correspond véritablement à l'exigence.
Oui, honnêtement. Si un module tiers, une fonctionnalité native de PrestaShop, ou aucun module du tout est la meilleure adéquation pour votre exigence, nous le disons. Toute la valeur de l'Évaluation d'Adéquation des Modules est une recommandation impartiale ; vous orienter vers notre propre catalogue sans égard à l'adéquation en défairait l'objet et éroderait la confiance sur laquelle le service est bâti.
Comment l'impartialité fonctionne en pratique
- L'exigence mène, pas le catalogue, nous évaluons chaque candidat au regard de vos exigences concrètes. Le module (ou la fonctionnalité native) de quiconque les satisfait le mieux remporte la recommandation, y compris quand ce n'est pas le nôtre.
- Le natif d'abord quand cela suffit. PrestaShop fait déjà énormément de choses d'emblée. Si la configuration ou une fonctionnalité intégrée résout votre problème, acheter n'importe quel module. Le nôtre ou celui de quiconque. Est le mauvais choix, et nous vous dirons d'économiser votre argent.
- Le tiers lorsqu'il convient mieux, si un module tiers est une meilleure adéquation pour votre version, votre thème ou votre flux de travail, c'est la recommandation honnête, avec les arbitrages expliqués.
- Les arbitrages sur la table, compatibilité, maintenabilité, performance, support et risque de mise à niveau entrent tous en compte, de sorte que la recommandation reflète le coût total de possession, et non une simple checklist de fonctionnalités.
Pourquoi c'est l'objet même du service
Une évaluation qui conclut toujours « achetez le nôtre » n'est pas une évaluation, c'est un argumentaire de vente. La raison pour laquelle les marchands paient pour une évaluation d'adéquation indépendante est précisément d'obtenir une recommandation à laquelle ils peuvent se fier, y compris quand elle les envoie ailleurs ou leur dit de ne rien faire. Le paysage des modules de PrestaShop est large et inégal, et la meilleure option pour une exigence donnée se trouve fréquemment en dehors de la gamme d'un seul fournisseur. Nous préférons avoir raison qu'être intéressés, car c'est ce qui rend la recommandation digne d'être suivie.
Vous recevez une matrice d'exigences claire mettant en correspondance chacun de vos besoins avec la solution la plus adaptée, avec une recommandation en langage clair et les arbitrages explicités. En bref : vous saurez quoi acheter ou construire, quoi écarter, et pourquoi, avant de dépenser de l'argent.
Ce que contient le livrable
- Une matrice d'exigences, chacun de vos besoins traduit en une exigence concrète et testable, mise en correspondance avec les solutions candidates (les nôtres, tierces et la fonctionnalité native de PrestaShop) afin que vous puissiez voir d'un coup d'œil ce qui satisfait quoi.
- Une recommandation la plus adaptée par exigence, l'option que nous choisirions et pourquoi, en langage clair, afin que le raisonnement soit transparent plutôt qu'un verdict de boîte noire.
- Les arbitrages, compatibilité avec votre version PrestaShop et votre thème, maintenabilité, performance et risque de mise à niveau, afin que vous compreniez non seulement ce qui convient mais ce que chaque choix vous coûte dans le temps.
- Des indications claires sur ce qu'il faut écarter. Y compris là où la configuration native suffit et où aucun module n'est nécessaire, ce qui fait souvent économiser le plus d'argent.
Pourquoi le format matriciel aide
Une matrice rend la décision auditable : au lieu de faire confiance à une seule ligne « achetez ceci », vous pouvez voir chaque exigence, chaque candidat, et exactement où chacun convient ou pèche. C'est particulièrement précieux sur PrestaShop, où le même résultat peut être atteint de plusieurs façons aux conséquences très différentes pour la stabilité et les mises à niveau futures. Cela facilite aussi de revoir la décision plus tard, ou de briefer un développeur précisément sur ce qu'il faut mettre en œuvre.
Le livrable est de qualité décisionnelle et impartial, il vous dit quoi acheter ou construire, quoi écarter, et pourquoi, avant que vous n'engagiez un budget. Il ne promet pas un résultat métier particulier ; ce qu'il vous donne, c'est la confiance que la solution que vous choisissez correspond véritablement à l'exigence, afin que vous achetiez la bonne chose une fois au lieu d'empiler des modules qui fonctionnent à moitié. Si vous décidez de poursuivre, la recommandation peut être transmise directement à la mise en œuvre, configuration, l'un de nos modules, ou développement sur mesure selon le cas.
L'Étude d'adéquation de thème évalue un thème, ou votre liste restreinte de candidats, au regard de vos besoins réels, et non des captures d'écran marketing soignées d'une page de démonstration. Un thème qui paraît rapide et flexible avec douze produits d'exemple peut se comporter très différemment une fois qu'il porte tout votre catalogue, vos modules et votre trafic. Nous comblons cet écart avant que vous ne vous engagiez.
Ce que nous inspectons réellement
- Performance en conditions réelles, la façon dont le thème s'affiche sur une taille de catalogue réaliste plutôt que sur une démo allégée, y compris le poids de son CSS/JS, la manière dont il gère les listes de catégories et de produits, et les endroits où il risque de tirer vos Core Web Vitals vers le bas.
- Aptitude au thème enfant, pouvez-vous personnaliser le thème via un véritable thème enfant tout en récupérant les mises à jour en amont en toute sécurité, ou bien chaque modification implique-t-elle d'éditer des fichiers du thème de base que la prochaine mise à jour écrasera ?
- Prise en charge du B2B, sa capacité à répondre à des exigences telles que les groupes de clients, les tarifs spécifiques, l'affichage des taxes et les catalogues pilotés par compte si votre boutique n'est pas purement B2C.
- Accessibilité, l'alignement sur les attentes EAA / WCAG, ce qui compte à la fois juridiquement et pour l'utilisabilité auprès de l'ensemble de votre audience.
- Qualité mobile, un véritable comportement responsive et une utilisabilité tactile, pas simplement une mise en page qui se réorganise techniquement.
- Rythme de mise à jour. Le thème est-il activement maintenu pour la version actuelle de PrestaShop, ou s'agit-il d'un code abandonné qui deviendra discrètement un fardeau ?
Pourquoi c'est important : le thème est l'une des choses les plus difficiles à changer après le lancement. Il touche chaque page, chaque parcours de conversion et votre coût de maintenance à long terme. Choisir sur la seule apparence est la façon dont les boutiques se retrouvent enfermées dans une dette de performance ou un code mort. Cette étude met ces risques en lumière pendant que vous avez encore le libre choix.
Elle convient aux marchands qui comparent des thèmes avant une construction ou une migration de plateforme, aux agences qui vérifient le thème préféré d'un client, et à toute personne souhaitant une lecture technique indépendante d'un thème PrestaShop plutôt qu'un argumentaire de vente.
Vous recevez un verdict noté sur chaque thème au regard de vos besoins spécifiques, avec les compromis et les risques rendus explicites avant que vous ne vous engagiez, et non découverts des semaines après le lancement, lorsqu'ils sont coûteux à défaire.
À quoi ressemble le livrable
- Une évaluation claire de chaque thème (ou de chaque candidat de votre liste restreinte) mesuré au regard des critères qui comptent pour votre boutique, afin que vous puissiez comparer ce qui est comparable plutôt que sur une première impression.
- Les risques nommés clairement, une dette de performance qui pénalisera la vitesse des pages et les Core Web Vitals, une prise en charge médiocre ou fragile du thème enfant qui bloque toute personnalisation sûre, des lacunes d'accessibilité au regard de l'EAA / WCAG, ou un code abandonné qui ne suivra pas le rythme de PrestaShop.
- Une lecture pragmatique de la question de savoir si un thème constitue une base solide, un compromis gérable, ou quelque chose à éviter.
Pourquoi c'est précieux : les problèmes de thème les plus dommageables sont ceux que vous ne pouvez pas voir dans une démo. Un thème peut paraître parfait et rester impossible à personnaliser sans casser les mises à jour, ou s'avérer lent une fois votre vrai catalogue chargé, ou être discrètement non maintenu. Au moment où cela apparaît en production, vous avez généralement déjà investi dans le contenu, la configuration et la personnalisation par-dessus.
Le but de l'étude est un choix éclairé. Vous décidez en connaissance de cause, conserver, personnaliser ou changer, et vous abordez la décision en sachant exactement ce que vous prenez en charge. Nous ne faisons aucune promesse sur un résultat particulier ; nous vous donnons l'image technique honnête afin que la décision vous revienne, sur des bases solides. C'est la différence entre choisir un thème et hériter de ses problèmes.
Oui. Nous pouvons examiner un thème que vous avez déjà acheté ou sur lequel vous avez déjà construit, et appliquer exactement le même verdict noté, fondé sur vos besoins, à ce que vous exploitez aujourd'hui. L'étude n'est pas réservée à la sélection d'un thème vierge. Elle est tout aussi utile lorsque vous avez hérité d'un thème, repris une boutique, ou commencé à soupçonner que votre thème actuel vous freine.
Ce que l'étude d'un thème existant vous révèle
- S'il vaut la peine d'être conservé, une lecture honnête de la question de savoir si votre thème actuel constitue une base solide dans laquelle continuer à investir, ou un fardeau à long terme.
- Quels sont ses risques, une dette de performance qui ralentit vos pages, une prise en charge fragile ou absente du thème enfant qui rend la personnalisation sûre difficile, des lacunes d'accessibilité au regard de l'EAA / WCAG, et la question de savoir si le code est encore activement maintenu pour la version actuelle de PrestaShop.
- Si un thème enfant ou un changement est la meilleure voie, si la structure est saine, nous pouvons confirmer que personnaliser via un véritable thème enfant vous maintient à l'abri des mises à jour ; sinon, nous vous disons clairement qu'un changement est la voie la moins risquée.
Pourquoi c'est important : de nombreux marchands ne découvrent les véritables limites d'un thème qu'après avoir construit du contenu, configuré des modules et personnalisé des templates par-dessus. Examiner ce que vous exploitez déjà vous permet de prendre cette décision de manière délibérée plutôt que réactive, avant d'investir davantage de travail sur une base bancale, ou à l'inverse avant de jeter inutilement un thème qui a simplement besoin d'une approche raisonnable par thème enfant.
Cela convient parfaitement aux boutiques qui n'ont pas choisi leur thème actuel, qui envisagent une refonte, ou qui souhaitent simplement un avis technique indépendant sur le thème dont elles dépendent déjà, avec les risques exposés clairement pour que la décision reste la vôtre.
Un projet de module PrestaShop sur mesure est mené comme une véritable mission d'ingénierie, et non comme un correctif rapide. Chaque projet commence par une phase de découverte cadrée, l'étape où nous transformons un besoin métier en une spécification concrète, prête à être construite.
La découverte d'abord
Lors de la découverte, nous déterminons ce que le module doit réellement faire, y compris les cas limites et les contraintes propres à PrestaShop qui font discrètement échouer les projets sous-cadrés : comment il doit s'accrocher au front-office et au back-office, comment il se comporte selon les groupes de clients, le multiboutique, les multiples langues et devises, comment il interagit avec le panier, les commandes ou le catalogue, et où le comportement du cœur peut ou ne peut pas être étendu en toute sécurité. Le résultat est une spécification suffisamment précise pour chiffrer et construire honnêtement. Les frais de découverte sont déduits de la construction, donc si vous poursuivez, ce n'est pas de l'argent perdu. Cela devient une partie du travail.
Construction, tests et livraison
À partir de cette spécification, nous construisons le module aux standards de production, en utilisant l'architecture de hooks et de surcharges de PrestaShop plutôt qu'en bidouillant le cœur, puis nous le testons et le livrons. Les conditions de support sont convenues dans le périmètre du projet, de sorte que vous savez d'emblée ce qui est couvert plutôt que de le découvrir plus tard.
Pourquoi procéder ainsi : la plupart des projets de modules pénibles échouent non pas dans le codage mais dans les hypothèses, une exigence qui s'avère signifier trois choses différentes, ou une contrainte PrestaShop que personne n'a vérifiée. Cerner ces points lors de la découverte est ce qui rend la construction prévisible.
Le résultat est un module qui fait exactement ce que les modules standards et ceux du marketplace ne font pas, construit délibérément pour votre boutique plutôt qu'assemblé à partir de pièces disparates. Il convient aux marchands dont le flux de travail, le catalogue ou l'intégration ne correspondent réellement pas à un module prêt à l'emploi, et qui veulent quelque chose de maintenable plutôt qu'un bricolage ponctuel qui casse à la prochaine mise à jour.
Votre module sur mesure est construit et testé sur PrestaShop 1.7, 8 et 9. PrestaShop a beaucoup changé d'une version majeure à l'autre. Des API du cœur ont été dépréciées, des signatures ont changé, et certaines méthodes ont été entièrement supprimées, de sorte qu'un module écrit naïvement pour une version cassera souvent sur une autre.
Comment nous le maintenons compatible
Nous utilisons des wrappers de compatibilité de version plutôt que d'appeler directement des API fragiles du cœur. Lorsqu'une méthode PrestaShop diffère ou disparaît entre les versions, le wrapper détecte la version en cours d'exécution et appelle la bonne API en dessous, de sorte que le même module se comporte correctement sur 1.7, sur 8 et sur 9. Cela réduit le risque de casse à la mise à jour due à des API du cœur dépréciées ou supprimées, le mode de défaillance qui laisse les marchands bloqués sur une ancienne version de PrestaShop parce que leur code sur mesure ne peut pas évoluer.
Self-heal / infra-guard
Le module est également livré avec notre architecture self-heal / infra-guard. Les mises à jour de PrestaShop et les reconstructions de cache peuvent laisser les onglets de back-office d'un module manquants, ses hooks non enregistrés ou son schéma de base de données désynchronisé, et le symptôme classique est un module qui échoue silencieusement, avec une entrée de menu disparue ou une fonctionnalité qui ne s'exécute discrètement plus. Infra-guard vérifie les propres onglets, hooks et schéma du module et les répare au lieu de les laisser se dégrader, de sorte que le module continue de fonctionner après une mise à jour de PrestaShop plutôt que de se détériorer sans qu'on s'en aperçoive.
Pourquoi c'est important : sur PrestaShop, le coût d'un module sur mesure est rarement la première construction, c'est tout ce qui vient après. Construire pour trois versions majeures prises en charge avec des wrappers de compatibilité et une infrastructure auto-réparatrice est ce qui maintient le module comme un actif à long terme qui survit aux mises à jour, plutôt qu'un fardeau qu'il faut ré-architecturer à chaque évolution de la plateforme. C'est particulièrement précieux pour les marchands qui comptent garder leur boutique à jour et ne veulent pas que leur code sur mesure soit ce qui les fige sur une ancienne version.
Oui, vous êtes propriétaire de votre module, et il s'agit véritablement de PHP ouvert et lisible, sans ionCube et sans obfuscation. Vous, ou tout développeur de votre choix, pouvez ouvrir le code source, lire exactement ce qu'il fait, l'auditer pour la sécurité et le comportement, et le maintenir ou l'étendre de manière indépendante.
Pourquoi c'est délibéré
Une grande partie du marché des modules PrestaShop livre du code chiffré ou verrouillé par ionCube. Cela paraît anodin jusqu'à ce que vous ayez besoin de changer quelque chose, de déboguer une interaction avec un autre module, ou de faire évoluer la boutique, et vous constatez que vous ne le pouvez pas, parce que le code est une boîte noire et que seul le fournisseur d'origine détient la clé. Cela vous enferme discrètement chez un seul fournisseur pour faire tourner votre propre boutique.
Nous faisons l'inverse. Parce que le module est livré sous forme de PHP simple et auditable :
- Vous pouvez le faire auditer en sécurité selon vos conditions, par toute personne en qui vous avez confiance.
- Vous pouvez déboguer les interactions avec votre thème et d'autres modules au lieu de vous heurter à un mur opaque.
- Vous pouvez faire en sorte que tout développeur PrestaShop compétent le maintienne ou l'étende, vous ne dépendez pas de nous pour continuer à fonctionner.
- Vous pouvez le lire pour comprendre votre propre boutique, ce qui compte pour la conformité, la transmission et la due diligence.
Pourquoi c'est important : un module sur mesure fait partie de l'infrastructure de votre entreprise, et une infrastructure que vous ne pouvez ni lire ni modifier n'est pas vraiment la vôtre. Un code ouvert et lisible signifie que vous n'êtes jamais pris en otage par l'enfermement propriétaire, et que l'avenir de votre boutique reste entre vos mains. C'est le contraire d'une grande partie du marché des modules PrestaShop, et c'est un choix délibéré, nous préférons mériter un travail continu en étant agréables à collaborer plutôt qu'en retenant votre code en captivité.
Le développement de modules PrestaShop sur mesure démarre à partir de 2 490 €. Le prix exact est fixé par la découverte cadrée, car un devis honnête a besoin d'une véritable spécification plutôt que d'une estimation faite avant que quiconque n'ait déterminé ce que le module doit réellement faire.
Pourquoi le prix est cadré, et non fixe
Le travail sur mesure varie énormément. Un module qui ajoute un comportement ciblé est une construction très différente d'un module qui s'intègre à un système externe, gère le multiboutique et plusieurs langues, manipule le flux du panier ou des commandes, ou doit composer avec des cas limites délicats selon les groupes de clients et les devises. Chiffrer tout cela à partir d'un brief d'une ligne soit gonfle le montant pour couvrir les inconnues, soit masque un risque qui ressurgit plus tard sous forme de dérive du périmètre. La découverte supprime les conjectures : nous transformons votre besoin en une spécification concrète, avec les contraintes PrestaShop et les cas limites cernés, et nous chiffrons au regard de celle-ci.
Les frais de découverte sont déduits de la construction
L'étape de découverte comporte des frais, mais ils sont déduits de la construction, donc ce n'est pas de l'argent perdu si vous décidez de poursuivre. Cela devient simplement une partie du projet. Si vous ne poursuivez pas, vous repartez tout de même avec une spécification claire et prête à construire de ce dont votre module aurait besoin, ce qui a une valeur en soi (par exemple si vous l'emmenez ailleurs ou y revenez plus tard).
Ce pour quoi vous payez : pas seulement du code, mais un module construit aux standards de production en PHP ouvert et lisible dont vous êtes propriétaire, testé sur PrestaShop 1.7, 8 et 9, avec l'architecture self-heal / infra-guard qui le maintient fonctionnel après les mises à jour de la plateforme. Le chiffre à partir de 2 490 € est le plancher réaliste pour ce niveau de travail ; la découverte détermine où votre projet spécifique se situe au-dessus.
Un Configurateur de produit fait ses preuves sur les produits complexes, sur mesure ou multi-composants, tout ce où le client assemble en réalité sa propre version plutôt que de choisir une référence fixe en rayon. Si un achat implique de choisir des dimensions, des matériaux, des finitions, des options et des compléments, une fiche produit plate ne peut pas le représenter honnêtement, et les attributs basés sur des combinaisons deviennent rapidement ingérables.
Produits qui s'y prêtent bien
- Produits coupés sur mesure, tout ce qui se vend à la longueur, la largeur ou la surface choisie, où le prix dépend des dimensions saisies par le client.
- Lots et kits, des produits assemblés à partir de plusieurs composants que le client sélectionne ensemble.
- Mobilier, structure, taille, matériau, tissu ou finition, et choix de compléments qui se combinent en un seul article composé.
- Signalétique, options de taille, de support, de finition et de quantité qui déterminent le prix.
- Équipement technique, matériel configurable où la bonne configuration dépend d'une chaîne de choix compatibles.
Pourquoi une fiche produit standard ne suffit pas : les attributs et combinaisons natifs de PrestaShop fonctionnent pour une poignée de variantes, mais ils ne s'adaptent pas aux produits comportant de nombreuses options indépendantes ou une tarification pilotée par les dimensions, vous vous retrouvez avec une explosion de combinaisons ou une page qui ne peut tout simplement pas capturer les vrais choix. Un configurateur modélise les options comme des choix plutôt que comme des variantes pré-construites, ce qui garde le catalogue gérable et l'expérience d'achat claire.
Sur la page, les acheteurs choisissent leurs options avec un assemblage de prix en direct, le prix se met à jour à mesure qu'ils construisent, de sorte qu'ils voient toujours le coût exact de la configuration qu'ils assemblent plutôt qu'un vague chiffre “à partir de” ou une impasse de devis sur demande. Cette transparence est ce qui transforme un produit complexe en quelque chose qu'un client peut acheter en ligne en toute confiance.
Cela convient aux marchands dont les produits sont réellement configurables et qui les forcent actuellement dans des fiches produit rigides, gèrent la configuration par e-mail, ou perdent des ventes parce que la vitrine ne peut pas afficher un vrai prix pour une vraie configuration.
Oui. Chaque configuration est propre au SEO et partageable via une URL basée sur un chemin, un chemin réel et lisible plutôt qu'une chaîne de requête désordonnée traînant une longue liste de paramètres ?option=…&option=…. Cette distinction compte plus qu'il n'y paraît au premier abord.
Pourquoi les URL basées sur un chemin sont importantes
- Liables et mémorisables. Un client peut enregistrer une configuration spécifique, y revenir plus tard, ou la rouvrir sur un autre appareil et reprendre exactement là où il en était.
- Partageables. Un acheteur peut envoyer sa configuration exacte à un collègue, un partenaire ou à votre équipe commerciale, et tout le monde aboutit à la même configuration. Vous pouvez tout aussi bien envoyer une configuration préparée à un client pour qu'il la reprenne.
- Indexables le cas échéant. Les chemins propres sont quelque chose que les moteurs de recherche peuvent traiter comme de véritables pages, plutôt que la soupe de paramètres que les robots ignorent généralement ou traitent comme des doublons. Vous gardez le contrôle des configurations qui méritent d'être mises en avant.
Construit sur le moteur Product Setup
Le configurateur s'appuie sur notre moteur Product Setup, ce qui signifie qu'il est rapide et explorable plutôt qu'une lourde boîte noire JavaScript. Beaucoup de configurateurs sont des widgets entièrement côté client : parfaits jusqu'à ce qu'un moteur de recherche, un lien partagé ou un client sur une connexion lente rencontre une coquille vide qui ne s'assemble qu'après l'exécution d'un tas de JavaScript. S'appuyer sur le moteur Product Setup garde les pages du configurateur réelles et accessibles, avec la sélection d'options interactive et en direct posée par-dessus plutôt que d'être la seule chose qui tient la page.
Pourquoi c'est important : pour les produits configurables, le lien est le produit. Si un client ne peut pas mémoriser, partager ou revenir à une configuration spécifique, ou si les moteurs de recherche ne peuvent pas comprendre vos configurations, vous perdez à la fois des conversions et de la découvrabilité. Des URL de configuration propres, basées sur un chemin et explorables transforment chaque configuration en un objet durable, partageable et indexable plutôt qu'en un état de navigateur jetable.
La mise en place du Configurateur de produit démarre à partir de 1 490 €, et le travail transforme votre produit et ses options en un configurateur guidé fonctionnel avec tarification en direct et URL partageables, et non un widget à moitié terminé que vous devez ensuite câbler vous-même.
Ce que la mise en place comprend
- Transformer votre produit et ses options réelles en un configurateur guidé qui accompagne l'acheteur dans ses choix sur la page.
- Une tarification en direct, pour que le prix s'assemble à mesure que le client construit et qu'il voie toujours le coût exact de sa configuration.
- Des URL de configuration partageables et basées sur un chemin, pour qu'une configuration spécifique puisse être liée, mémorisée, envoyée à un client et indexée le cas échéant, plutôt que d'être prisonnière d'un état de navigateur transitoire.
Pourquoi le périmètre est confirmé en découverte
Le périmètre exact, le nombre d'options, les règles de tarification qui relient ces options au prix final, et toutes les intégrations dont le configurateur a besoin. Est confirmé lors d'une courte découverte. C'est ce qui garde le devis honnête : un configurateur avec quelques options simples et une tarification basique est une construction très différente d'un configurateur avec une tarification pilotée par les dimensions, des options interdépendantes, ou une connexion à un autre système. La découverte garantit que le devis reflète votre produit réel, et non un modèle appliqué à l'aveugle, de sorte que vous ne payez pas pour une complexité que vous n'avez pas ni ne sous-cadrez une complexité que vous avez.
Pourquoi c'est important : pour les produits configurables, “mettre en place un configurateur” peut signifier des quantités de travail radicalement différentes selon le comportement réel des options et de la tarification. S'ancrer à partir de 1 490 € puis confirmer les détails en découverte vous donne un plancher réaliste et un prix fondé sur votre produit réel. Cela convient aux marchands disposant de produits réellement configurables qui veulent que les acheteurs construisent et chiffrent leur propre version sur la vitrine, chaque configuration étant propre, rapide et partageable.
Monitoring Plan est le plus léger de nos Care Plans PrestaShop, un filet de sécurité continu, toujours actif, qui surveille votre boutique pour que vous n'ayez pas à le faire. Il est conçu pour une seule mission et la remplit bien : vous prévenir qu'un problème existe avant qu'un client ne vous envoie un e-mail à ce sujet.
Ce qui est inclus
- Surveillance de la disponibilité. Votre vitrine et votre tunnel de commande sont vérifiés en continu, de sorte qu'une panne déclenche une alerte au moment où elle survient plutôt que des heures plus tard.
- Vérifications cron & santé du cœur, nous détectons les tâches cron cassées ou bloquées et les erreurs fatales évidentes qui dégradent discrètement une boutique PrestaShop (tâches planifiées échouées, processus du cœur manquants, fatals PHP récurrents).
- Veille sécurité & performance, des alertes de régression de base qui signalent quand quelque chose a changé pour le pire.
- Tableau de bord en direct + rapport mensuel, une vue en temps réel du % de disponibilité, des incidents et de ce que nous avons repéré, résumé chaque mois pour que vous disposiez d'une trace claire.
Ce que montrent le tableau de bord et le rapport
Le tableau de bord en direct vous donne un état de santé en un coup d'œil : pourcentage de disponibilité actuel, incidents ouverts ou récents, et dernières vérifications. Le rapport mensuel regroupe cela en disponibilité sur la période, journal des incidents, et une courte note sur tout ce qui mérite votre attention, afin que même un propriétaire peu impliqué reste informé.
Une limite honnête
Monitoring Plan est de la surveillance et de l'alerte uniquement. C'est l'œil posé sur votre boutique, pas les mains. Le travail de réparation proprement dit est chiffré séparément, ou pris en charge par les heures d'expert mensuelles de Store Care Plan. Nous gardons cette ligne claire à dessein, pour que vous sachiez toujours exactement ce que vous payez. La couverture en heures ouvrées pour les événements signalés s'effectue lun.–ven., 09h00–18h00 CET.
Si votre boutique est stable et que vous voulez simplement un système d'alerte précoce fiable, Monitoring Plan est le bon point de départ. Lorsque vous préférez que les petits problèmes soient pris en charge pour vous au fur et à mesure qu'ils apparaissent, Store Care Plan est l'étape supérieure naturelle. Il inclut tout ce qui est ici, plus un pool d'heures d'expert chaque mois.
Monitoring Plan couvre la surveillance et l'alerte, c'est l'œil posé sur votre boutique, pas les mains. Quand quelque chose casse, vous êtes prévenu immédiatement ; la réparation proprement dite est ensuite chiffrée séparément, ou couverte par les heures d'expert mensuelles de Store Care Plan. Nous sommes délibérés sur cette distinction afin qu'il n'y ait jamais de surprise sur ce que le plan fait et ne fait pas.
Comment cela fonctionne en pratique
Lorsqu'une vérification échoue, votre vitrine ou votre tunnel de commande tombe, une tâche cron se bloque, ou une erreur fatale apparaît, Monitoring Plan déclenche une alerte et consigne l'incident sur votre tableau de bord en direct. Vous prenez connaissance du problème au moment où il survient plutôt que par un client mécontent. Ce que Monitoring Plan ne fait pas, c'est se connecter automatiquement et réparer le problème ; le diagnostic et la résolution constituent un travail distinct.
Vos options quand quelque chose doit être corrigé
- Chiffrer la correction séparément, nous cadrons le problème spécifique et vous approuvez le travail avant que quoi que ce soit ne soit fait.
- Passer à Store Care Plan, si vous préférez ne pas gérer de devis incident par incident, Store Care Plan inclut tout ce qui est dans Monitoring Plan plus 2 heures de travail d'expert par mois (plafond 6h) pour prendre en charge les petits problèmes, configuration, cache, cron, paramètres de modules et erreurs PHP évidentes, au fur et à mesure qu'ils apparaissent.
Voyez les choses ainsi : Monitoring Plan est conçu pour vous alerter rapidement et vous donne un compte rendu clair de ce qui s'est passé. Store Care Plan ajoute quelqu'un pour agir sur les petites choses sans nouveau devis à chaque fois. De nombreux propriétaires de boutiques commencent par Monitoring Plan pour la tranquillité d'esprit et passent à Store Care Plan une fois qu'ils réalisent à quel point ils préféreraient déléguer la maintenance de routine. Dans tous les cas, les projets plus importants, une nouvelle fonctionnalité, un module sur mesure, une migration, sont toujours cadrés et chiffrés à part, de sorte que la frontière entre surveillance et travail concret reste nette et honnête.
Une indisponibilité déclenche une alerte instantanée. Un événement P1, votre vitrine ou votre tunnel de commande hors service, est signalé immédiatement pendant les heures ouvrées (lun.–ven., 09h00–18h00 CET), de sorte que vous l'apprenez au moment où cela survient plutôt que par un client mécontent ou une commande manquée.
Ce qui compte comme P1
P1 est réservé aux choses qui vous coûtent directement des ventes : votre vitrine qui ne se charge pas, ou le tunnel de commande qui échoue de sorte que les clients ne peuvent pas finaliser une commande. Ce sont les signaux de plus haute priorité sur votre tableau de bord, précisément parce que chaque minute d'une panne compte pour une boutique PrestaShop.
Comment fonctionne l'alerte
Monitoring Plan vérifie votre vitrine et votre tunnel de commande en continu. Dès qu'une vérification échoue, une alerte est déclenchée et l'incident est enregistré sur votre tableau de bord en direct avec un horodatage. Cela vous donne deux choses à la fois : un avertissement immédiat, et un enregistrement permanent que vous pouvez consulter, utile pour repérer des schémas ou confirmer exactement quand un problème a commencé et s'est terminé.
Une note honnête
Monitoring Plan vous prévient rapidement, c'est sa promesse fondamentale, mais c'est un plan de surveillance et d'alerte, de sorte que la réparation proprement dite est chiffrée séparément ou prise en charge par les heures mensuelles de Store Care Plan. Nous ne promettons pas zéro indisponibilité ; aucun prestataire honnête ne le peut. Ce que nous promettons, c'est que vous ne serez pas le dernier au courant. Les vérifications continues, plus le signalement immédiat pendant la plage horaire ouvrée, font que les problèmes apparaissent dès que les vérifications continues les signalent, et non après qu'un client a pris le temps de se plaindre. Ce qui fait souvent la différence entre une reprise rapide et un après-midi de commandes perdu.
Monitoring Plan convient le mieux aux boutiques qui sont stables et veulent simplement un œil posé sur elles, un filet de sécurité fiable sans pool mensuel d'heures de travail. Si votre boutique PrestaShop tourne sans accroc la plupart du temps et que vous voulez surtout être sûr d'être prévenu rapidement d'un problème, c'est le bon choix.
Vous tirerez le meilleur de Monitoring Plan si…
- Votre boutique est établie et raisonnablement sans souci, et vous avez rarement besoin de modifications concrètes.
- Vous voulez une surveillance continue de la disponibilité, du cron et de la santé du cœur, avec des alertes immédiates pendant les heures ouvrées (lun.–ven., 09h00–18h00 CET).
- Vous préférez payer la correction occasionnelle sous forme de devis distinct et approuvé plutôt que de porter un budget mensuel d'heures que vous pourriez ne pas utiliser.
- Vous appréciez un tableau de bord en direct et un rapport mensuel comme trace claire et honnête de la santé de votre boutique.
Quand passer à l'échelon supérieur
Si vous voulez aussi que les petites corrections soient prises en charge pour vous, configuration, cache, cron, paramètres de modules et erreurs PHP évidentes, sans chiffrer chacune, passez à Store Care Plan. Store Care Plan inclut tout ce qui est dans Monitoring Plan plus 2 heures de travail d'expert par mois (plafond 6h, sans report), de sorte que la maintenance de routine est faite plutôt que de s'accumuler. Et si votre priorité est la visibilité dans les recherches plutôt que la disponibilité, SEO Care Plan se concentre plutôt sur l'hygiène SEO technique.
En bref : choisissez Monitoring Plan lorsque vous voulez une alerte précoce fiable et une trace écrite, et que vous êtes à l'aise avec des corrections chiffrées au besoin. Choisissez Store Care Plan lorsque vous aimeriez que quelqu'un garde discrètement les petites choses en ordre chaque mois. De nombreux propriétaires commencent par Monitor et montent en gamme une fois qu'ils voient combien de travail de routine ils préféreraient déléguer.
Store Care Plan maintient votre boutique PrestaShop en bonne santé et vous donne une vraie personne pour gérer les petites choses qui, sinon, s'accumulent. C'est le juste milieu pratique de nos Care Plans : surveillance plus un pool mensuel d'heures d'expert, de sorte que les problèmes sont à la fois repérés et traités.
Ce qui est inclus
- Tout ce qui est dans Monitoring Plan, surveillance continue de la disponibilité, du cron et de la santé du cœur avec alertes immédiates, pour que vous sachiez toujours quand quelque chose ne va pas.
- Vérifications sécurité & performance, avertissements de modules et de configuration plus veille de régression, pour qu'un changement qui dégrade discrètement votre boutique soit signalé.
- 2 heures de travail d'expert par mois (plafond 6h), les corrections de configuration, cache, cron et modules, et les erreurs PHP évidentes, qui sinon s'accumulent en arriéré.
- Tableau de bord en direct + rapport mensuel, scores de santé, incidents, actions menées et heures consommées, pour que vous voyiez exactement où votre temps est passé.
Comment fonctionnent les heures
Store Care Plan inclut 2 heures d'expert par mois. Les heures ne se reportent pas, et tout dépassement est facturé par tranches de 15 minutes jusqu'à un plafond mensuel de 6 heures, de sorte qu'un mois chargé ne s'emballe jamais. Les heures visent la petite maintenance récurrente qui fait tourner une boutique ; un projet plus important (une nouvelle fonctionnalité, un module sur mesure, une migration) est cadré et chiffré à part.
Objectifs de service et reporting
Store Care Plan porte un objectif de disponibilité surveillée de 99,5 % et vise une réponse sous 3 heures ouvrées pour un incident P1, vitrine ou tunnel de commande hors service, pendant la plage horaire ouvrée (lun.–ven., 09h00–18h00 CET). Le rapport mensuel relie le tout : il montre vos scores de santé et leur tendance, les incidents survenus, les actions spécifiques menées sur votre boutique, et la façon dont les heures mensuelles ont été utilisées. Une trace transparente plutôt qu'un vague “tout va bien”.
Store Care Plan convient aux propriétaires qui veulent que leur boutique soit surveillée et que le travail de routine soit discrètement pris en charge, sans émettre un devis distinct chaque fois qu'une petite chose nécessite de l'attention. Si votre priorité est plutôt la visibilité dans les recherches, associez-le à SEO Care Plan, qui se concentre sur l'hygiène SEO technique.
Store Care Plan inclut 2 heures d'expert par mois. Les heures ne se reportent pas, et tout dépassement est facturé par tranches de 15 minutes jusqu'à un plafond mensuel de 6 heures, de sorte qu'un mois chargé ne s'emballe jamais, et que vous connaissez toujours votre exposition maximale à l'avance.
Comment les heures sont structurées
- 2 heures incluses chaque mois, votre allocation permanente pour la maintenance de routine.
- Sans report, chaque mois repart de zéro ; le temps non utilisé n'est pas mis en réserve. Les heures sont conçues pour garder votre boutique à jour, non pour accumuler un solde.
- Dépassement par tranches de 15 minutes, si un mois nécessite plus que les 2 heures incluses, le travail supplémentaire est facturé précisément, par blocs d'un quart d'heure plutôt qu'arrondis à l'heure supérieure.
- Plafonné à 6 heures. Le total mensuel d'heures est plafonné à 6, de sorte que même un mois exceptionnellement exigeant a un plafond prévisible.
À quoi servent les heures, et à quoi elles ne servent pas
Les heures couvrent le petit travail récurrent qui maintient une boutique PrestaShop en bonne santé : configuration, cache, cron, paramètres de modules et erreurs PHP évidentes. Elles sont délibérément cadrées sur la maintenance régulière qui sinon s'accumule.
Un travail plus important, une nouvelle fonctionnalité, un module sur mesure, une migration de données, une refonte. Sort des heures mensuelles et est cadré et chiffré à part. Cela garde l'allocation mensuelle concentrée et votre facture prévisible : entretien de routine à l'intérieur du plan, projets chiffrés en toute transparence et approuvés avant de commencer.
Tout suivre
Chaque action et les heures qu'elle a consommées sont enregistrées sur votre tableau de bord en direct et résumées dans le rapport mensuel, pour que vous voyiez exactement comment les 2 heures ont été utilisées et si un dépassement s'est appliqué. Si vous avez constamment besoin de plus que ce que le plafond permet, c'est un signal clair qu'il vaut la peine de cadrer une mission dédiée plutôt que d'étirer un plan de maintenance.
Pour un incident P1, votre vitrine ou votre tunnel de commande hors service, Store Care Plan vise une réponse sous 3 heures ouvrées (lun.–ven., 09h00–18h00 CET). Le plan porte également un objectif de disponibilité surveillée de 99,5 %, de sorte que les problèmes sont détectés et traités rapidement plutôt que laissés à traîner.
Ce que signifie P1
P1 est réservé aux problèmes qui vous empêchent directement de vendre : votre vitrine qui ne se charge pas, ou le tunnel de commande qui échoue de sorte que les clients ne peuvent pas finaliser une commande. Ce sont les événements de plus haute priorité parce que chaque minute compte pour une boutique PrestaShop, et c'est autour d'eux que l'objectif de réponse est construit.
Comment la réponse fonctionne aux côtés de la surveillance
Store Care Plan inclut tout ce qui est dans Monitoring Plan, de sorte qu'un événement P1 est détecté et signalé au moment où il survient grâce aux vérifications continues. L'objectif de réponse de 3 heures ouvrées régit ensuite la rapidité avec laquelle nous commençons à traiter l'incident pendant la plage horaire ouvrée. La détection est immédiate ; l'objectif de réponse couvre le début de l'attention concrète.
Un mot honnête sur la disponibilité
L'objectif de disponibilité surveillée de 99,5 % est exactement cela, un objectif que nous surveillons et sur lequel nous faisons rapport, pas une promesse de zéro indisponibilité. Aucun prestataire honnête ne peut garantir qu'une boutique ne tombera jamais. Ce à quoi Store Care Plan s'engage, c'est une détection rapide et une fenêtre de réponse définie, plus une trace transparente des incidents et de la façon dont ils ont été traités dans votre rapport mensuel.
Rappelez-vous que le travail de résolution mensuel puise dans vos 2 heures d'expert (plafond 6h, sans report) ; une reprise ou un projet réellement important au-delà des corrections de routine est cadré et chiffré séparément. La combinaison, surveillance continue, un objectif de réponse P1 de 3 heures ouvrées, et un objectif de disponibilité surveillée de 99,5 %, fait que les problèmes sont mis en lumière et traités rapidement plutôt que découverts tard et laissés à s'envenimer.
Les heures mensuelles de Store Care Plan couvrent les petites choses qui maintiennent une boutique en bonne santé : configuration, cache, cron, paramètres de modules et erreurs PHP évidentes. C'est la maintenance régulière et peu glorieuse qui sinon s'accumule discrètement et qui, laissée seule, se transforme en un problème bien plus grand.
Travail typique que les heures couvrent
- Configuration, ajuster les paramètres de PrestaShop et des modules, corriger les options qui ont dérivé, remettre de l'ordre dans les paramètres de la boutique.
- Cache, vider et reconstruire le cache lorsqu'il provoque des pages obsolètes ou un comportement étrange, et résoudre les anomalies liées au cache.
- Cron, remettre en marche les tâches planifiées bloquées ou cassées pour que les traitements en arrière-plan fassent leur travail.
- Paramètres de modules, corriger les modules mal configurés et les petits conflits qui apparaissent après les mises à jour.
- Erreurs PHP évidentes, résoudre les fatals et avertissements manifestes qui dégradent une boutique.
Ce qui sort des heures mensuelles
Tout ce qui est plus important, une nouvelle fonctionnalité, un module sur mesure, un changement de thème, une migration de données. Est cadré et chiffré séparément. C'est intentionnel : cela garde les heures mensuelles concentrées sur le bon fonctionnement de votre boutique, et garde votre facture prévisible, avec le travail plus important chiffré en toute transparence et approuvé avant de commencer.
Comment le temps est géré
Vous disposez de 2 heures d'expert par mois. Les heures ne se reportent pas, le dépassement est facturé par tranches de 15 minutes, et le total est plafonné à 6 heures par mois. De sorte que même un mois chargé reste prévisible. Chaque tâche et les heures qu'elle a utilisées sont consignées sur votre tableau de bord en direct et résumées dans le rapport mensuel, pour que vous voyiez précisément ce qui a été fait et où le temps est passé. Si vous constatez que vous atteignez régulièrement le plafond sur du travail de routine, c'est généralement le signe qu'il vaut la peine de cadrer une mission dédiée plutôt que d'étirer un plan de maintenance, et nous vous le dirons honnêtement.
SEO Care Plan maintient solides les fondations techniques de votre SEO PrestaShop à mesure que votre catalogue et votre contenu évoluent sans cesse. C'est un plan d'hygiène technique continu : un contrôle régulier, des heures pour corriger ce qu'il révèle, et une vue honnête et priorisée de ce qu'il convient de faire ensuite, y compris quand vous n'avez pas besoin de dépenser.
Ce qui est inclus
- Audit SEO technique mensuel, indexation, canonicals, métadonnées, contenu dupliqué, données structurées et Core Web Vitals, pour que les signaux techniques sur lesquels les moteurs de recherche s'appuient restent propres à mesure que votre boutique évolue.
- Hygiène SEO catégories/produits, garder les pages de catégories et de produits techniquement saines, plus des recommandations de maillage interne pour renforcer la façon dont les pages se connectent.
- 4 heures par mois (plafond 8h), du temps pour corriger les petits problèmes SEO que l'audit met en lumière, avant qu'ils ne s'accumulent.
- Tableau de bord SEO en direct + rapport mensuel, la tendance de votre score dans le temps, les corrections appliquées, et une liste priorisée de “à faire ensuite”.
Ce que contiennent le tableau de bord et le rapport
Le tableau de bord en direct suit la santé de votre SEO technique et son évolution. Le rapport mensuel ajoute le détail : ce que l'audit a trouvé, quels problèmes ont été corrigés avec les heures incluses, et une liste de “à faire ensuite” clairement ordonnée pour que le travail le plus utile soit évident. Surtout, il vous dit honnêtement quand vous n'avez pas besoin de dépenser, nous ne fabriquerons pas de travail pour remplir les heures.
Comment fonctionnent les heures
SEO Care Plan inclut 4 heures par mois pour corriger les petits problèmes SEO, jusqu'à un plafond de 8 heures ; les heures ne se reportent pas. L'objectif est de garder votre hygiène SEO à jour plutôt que de mettre du temps en réserve.
Une limite honnête
SEO Care Plan concerne l'hygiène SEO technique. Il ne fait aucune garantie de classement ou de trafic, car aucun prestataire honnête ne peut les promettre. Et ce n'est pas un plan de disponibilité : pour la surveillance vitrine/tunnel de commande et la réponse aux pannes, associez-le à Store Care Plan (ou choisissez Complete Care Plan, qui inclut les deux). Ce que SEO Care Plan fait, c'est détecter tôt les régressions techniques, pour qu'une base saine le reste.
SEO Care Plan inclut 4 heures par mois pour corriger les petits problèmes SEO, jusqu'à un plafond de 8 heures. Les heures ne se reportent pas. Chaque mois est une nouvelle allocation centrée sur le maintien à jour de votre hygiène SEO plutôt que sur la mise en réserve de temps.
Comment les heures sont structurées
- 4 heures incluses chaque mois, votre allocation permanente pour corriger les petits problèmes de SEO technique que l'audit mensuel met en lumière.
- Sans report, le temps non utilisé n'est pas reporté. Le plan vise à rester à jour mois après mois, non à accumuler un solde que vous pourriez ne jamais utiliser.
- Plafonné à 8 heures, de sorte que même un mois avec plus à corriger a un plafond prévisible.
À quoi servent les heures
Les heures visent le travail régulier et léger d'hygiène SEO qui garde votre fondation technique propre à mesure que votre catalogue et votre contenu changent : corriger les problèmes d'indexation et de canonical, remettre de l'ordre dans les métadonnées, traiter le contenu dupliqué, corriger les données structurées, agir sur les recommandations de maillage interne, et résoudre les problèmes de pages de catégories et de produits que l'audit signale. Elles sont délibérément cadrées sur la maintenance plutôt que sur de grandes campagnes.
Où s'inscrit le travail plus important
Un effort important et ponctuel, un diagnostic approfondi, un projet majeur de contenu ou de structure, sort des heures mensuelles et est traité séparément ; un Audit SEO ponctuel est la rampe d'accès naturelle pour ce type d'analyse approfondie. SEO Care Plan garde ensuite la fondation en bonne santé mois après mois.
Une note honnête sur la règle “sans report” : elle n'est pas là pour vous faire perdre du temps, elle reflète la vocation du plan. S'il n'y a réellement rien d'urgent à corriger un mois donné, le rapport mensuel le dira clairement. Nous préférons vous le dire plutôt qu'inventer du travail pour consommer les heures. Et pour fixer clairement les attentes, SEO Care Plan ne fait aucune promesse de classement ou de trafic ; il garde votre SEO technique sain, ce qui est la fondation dont ces résultats dépendent.
La réponse standard sous SEO Care Plan est de 1 jour ouvré ; un problème critique, par exemple un noindex accidentel sur des pages clés, est traité sous 8 heures ouvrées.
Ce qui compte comme critique
Critique signifie un problème de SEO technique qui peut activement vous coûter de la visibilité s'il n'est pas traité, l'exemple le plus clair étant un noindex accidentel sur des pages importantes, qui peut discrètement les retirer des résultats de recherche. Les problèmes de ce type bénéficient du traitement plus rapide sous 8 heures ouvrées ; les éléments de routine suivent la réponse standard de 1 jour ouvré.
L'indisponibilité est-elle couverte ? Non, et c'est délibéré
SEO Care Plan n'est pas un plan de disponibilité. Il surveille et maintient votre SEO technique ; il ne surveille pas votre vitrine ou votre tunnel de commande pour les pannes, et il ne porte ni objectif de disponibilité ni SLA de réponse aux pannes. Nous gardons cette distinction claire pour que vous ne comptiez jamais sur le mauvais plan pour la mauvaise tâche.
Si vous avez besoin de surveillance vitrine/tunnel de commande et de réponse aux pannes, associez SEO Care Plan à Store Care Plan, qui ajoute la surveillance continue de la disponibilité, du cron et de la santé du cœur, un objectif de disponibilité surveillée de 99,5 % et une réponse P1 sous 3 heures ouvrées. Alternativement, choisissez Complete Care Plan, qui inclut à la fois SEO Care Plan et le volet disponibilité dans un seul plan.
Le résumé honnête
SEO Care Plan vous offre des fenêtres de réponse définies pour le travail SEO, 1 jour ouvré en standard, 8 heures ouvrées pour les problèmes critiques comme un noindex accidentel, et garde votre SEO technique en bonne santé. Pour tout ce qui concerne le maintien effectif de votre boutique en ligne, c'est le rôle de Store Care Plan. Associer les deux (ou utiliser Complete Care Plan) couvre proprement les deux fronts.
Les deux opèrent à des échelles et des horizons temporels différents. L'Audit SEO est un diagnostic approfondi et ponctuel, un examen minutieux de votre boutique à un instant donné, aboutissant à un plan priorisé. SEO Care Plan est la relation continue : un contrôle technique mensuel, des heures pour corriger ce qu'il révèle, et une liste honnête de “à faire ensuite” à mesure que votre boutique continue d'évoluer.
L'Audit SEO ponctuel
Un Audit SEO est un diagnostic approfondi à un instant donné. Il examine votre SEO technique en détail et vous remet un plan priorisé de ce qu'il faut traiter. C'est la façon idéale de comprendre où vous en êtes et ce qui compte le plus, un instantané complet et une feuille de route à ce moment-là. Ce qu'il ne fait pas, c'est continuer à surveiller ensuite ; une fois livré, c'est une image figée d'une boutique qui continuera inévitablement d'évoluer.
SEO Care Plan, le plan continu
SEO Care Plan transforme cela en une discipline continue. Chaque mois, il réalise un audit SEO technique (indexation, canonicals, métadonnées, contenu dupliqué, données structurées, Core Web Vitals), vous donne 4 heures par mois (plafond 8h, sans report) pour corriger les petits problèmes qu'il met en lumière, et fournit un tableau de bord en direct plus un rapport mensuel avec une liste priorisée de “à faire ensuite”. Parce que votre catalogue et votre contenu changent constamment, c'est ce qui détecte les régressions techniques avant qu'elles ne défassent discrètement le travail antérieur.
Comment ils s'articulent
Ils sont complémentaires, non concurrents. Un Audit SEO ponctuel est la rampe d'accès parfaite, l'analyse approfondie qui établit votre référence et vos priorités. SEO Care Plan garde ensuite cette fondation saine mois après mois, corrigeant tôt les petites choses et vous disant honnêtement quand rien d'urgent ne nécessite d'action.
Une réserve honnête s'applique aux deux : ni l'un ni l'autre ne promet de classement ou de trafic. L'Audit diagnostique et le plan Care maintient votre SEO technique, la fondation dont ces résultats dépendent, plutôt que de garantir un résultat qu'aucun prestataire honnête ne peut promettre.
Growth Care Plan est un forfait mensuel qui apporte de la rigueur à la partie de votre boutique PrestaShop que la plupart des équipes laissent discrètement dériver : la couche de données dont dépend chaque décision marketing. Il est bâti autour d'une idée simple, avant de dépenser plus en publicité ou de chercher plus de trafic, les chiffres au regard desquels vous mesurez doivent être fiables. Growth Care Plan garde le suivi, les flux et la mesure des conversions honnêtes, et vous donne un second avis récurrent sur les endroits où le budget est gaspillé.
Ce qui est inclus chaque mois
- Santé de GA4 et du suivi d'événements, nous vérifions que GA4 se déclenche correctement, que les événements e-commerce clés (vue, ajout au panier, paiement, achat) sont présents et ne sont pas comptés en double, et que la validation du suivi des conversions confirme que les valeurs enregistrées par vos plateformes publicitaires correspondent bien à de vraies commandes.
- Revue du flux produit, nous parcourons le flux à la recherche d'erreurs et de refus, signalons les attributs manquants ou mal formés, et effectuons un contrôle de cohérence des annonces Google et sociales pour que votre catalogue soit éligible et correctement représenté.
- Recommandations campagnes et pages de destination, des conseils honnêtes et priorisés sur la structure, le ciblage et les pages de destination, y compris des conseils d'adéquation de module lorsqu'un module PrestaShop résoudrait un problème mieux qu'un développement sur mesure.
- 4 heures par mois de travail concret (plafond 8h, sans report) pour les petites corrections de suivi et de flux. Le genre de corrections qui sinon restent en arriéré pendant des mois.
Comment cela fonctionne
Tout est consigné dans un tableau de bord marketing en direct plus un rapport mensuel. Le tableau de bord montre l'état du suivi et du flux en un coup d'œil ; le rapport résume ce que nous avons vérifié, ce que nous avons modifié dans le cadre des heures incluses, et les recommandations qui comptent le plus. Il inclut délibérément une section “arrêtez de faire ceci”, les dépenses, segments ou tactiques que les données suggèrent de couper, car supprimer le gaspillage est souvent le gain le plus rapide.
Surtout, Growth Care Plan concerne la fondation, et non la gestion quotidienne des campagnes ou des enchères, et il ne garantit jamais le ROAS ni les approbations des plateformes publicitaires. Nous veillons à ce que la mesure soit propre et le flux sain afin que vous, ou votre acheteur média, puissiez prendre des décisions à partir de données auxquelles vous pouvez réellement vous fier. Les boutiques qui veulent que l'exploitation et le SEO soient pris en charge dans la même relation peuvent passer à Complete Care Plan, qui combine Store Care Plan, SEO Care Plan et Growth Care Plan sous une seule équipe responsable.
Non, Growth Care Plan ne gère pas vos campagnes et ne garantit jamais le ROAS ni les approbations des plateformes publicitaires. Il est délibérément cadré autour de la fondation plutôt que de la gestion quotidienne des campagnes ou des enchères, et nous gardons cette frontière honnête car c'est la seule façon responsable de parler de média payant.
Pourquoi nous ne promettons pas de résultats
Le retour sur les dépenses publicitaires dépend de facteurs qu'aucune agence ne contrôle : vos marges, votre prix face aux concurrents, la saisonnalité, la dynamique des enchères, le créatif, et les propres systèmes d'approbation et de revue des plateformes publicitaires. Quiconque garantit un chiffre de ROAS ou des approbations garanties soit joue avec votre budget, soit absorbe discrètement le risque dans ses tarifs. Nous préférons être francs avec vous. Il en va de même pour les approbations des plateformes publicitaires, Google et les réseaux sociaux décident de l'éligibilité, et nous ne pouvons pas passer outre leur revue.
Ce que Growth Care Plan livre réellement
- Revue de la santé du suivi, intégrité de GA4 et des événements, plus validation du suivi des conversions pour que les chiffres vers lesquels vos campagnes optimisent soient réels, non des conversions fantômes ou dupliquées.
- Revue du flux produit, détecter les erreurs et les refus avant qu'ils n'étranglent discrètement la portée, et un contrôle de cohérence des annonces Google/sociales.
- Recommandations honnêtes, y compris une vue “arrêtez de faire ceci” des endroits où le budget fuit, et des conseils d'adéquation de module là où un module PrestaShop est la meilleure réponse.
La valeur est simple : lorsque votre mesure est propre, chaque décision que vous prenez, budget, enchères, audiences, pages de destination, repose sur des données auxquelles vous pouvez vous fier plutôt que sur des conjectures. Cette fondation est ce qui fait que la gestion des campagnes (que vous la fassiez en interne ou avec un acheteur média) fonctionne réellement. Si vous voulez une seule équipe responsable de l'exploitation, du SEO et de la fondation du suivi ensemble, Complete Care Plan combine les trois, ses heures allant à l'exploitation, au SEO, au suivi et aux flux, et non à la gestion des campagnes.
Growth Care Plan porte un engagement de réponse clair, à deux niveaux, pour que vous sachiez toujours à quoi vous attendre.
- Réponse standard : 1 jour ouvré. Pour les demandes de routine, une question de suivi, un ajustement de flux, une recommandation à discuter, ou une petite correction dans le cadre de vos heures incluses, nous accusons réception et commençons le travail sous un jour ouvré.
- Défaillance de suivi sur une campagne payante active : sous 8 heures ouvrées. Lorsque le suivi casse sur une campagne payante en direct, chaque heure de données cassées coûte de l'argent réel, le budget continue de se dépenser pendant que votre mesure est aveugle. Ces cas sont escaladés et traités sous 8 heures ouvrées.
Pourquoi le niveau plus rapide compte
Une balise GA4 cassée, un pixel de conversion défaillant ou un refus de flux pendant une campagne active ne perd pas seulement une journée de reporting. Il peut discrètement fausser l'optimisation de la plateforme, induire en erreur vos enchères, et gaspiller des dépenses jusqu'à ce qu'il soit détecté. Le niveau de 8 heures ouvrées existe spécifiquement pour ce scénario : les moments où l'intégrité de la mesure perd de l'argent et où attendre une journée entière n'est pas acceptable.
Ce sont des engagements de réponse, la rapidité avec laquelle nous nous engageons et commençons le travail, non des promesses que chaque problème se résout instantanément, puisque certaines corrections dépendent de plateformes tierces (Google, Meta, GA4) et de leurs propres délais de revue. Les 4 heures par mois incluses (plafond 8h, sans report) couvrent la correction concrète des petits problèmes de suivi et de flux. Si votre boutique a aussi besoin d'une réponse aux incidents opérationnels, Complete Care Plan ajoute un niveau de 3 heures ouvrées pour les incidents de vitrine et de tunnel de commande et une option d'urgence 24/7 en complément.
Growth Care Plan est conçu pour les boutiques qui dépensent activement en publicité, Google, Shopping ou social, et qui veulent que la couche de données sous-jacente à ces dépenses reste honnête. Si vous investissez un budget réel dans l'acquisition payante, le coût d'un mauvais suivi ou d'un flux discrètement refusé se cumule vite, et ce plan existe pour stopper cette dérive.
Vous êtes un bon candidat si…
- Vous menez des campagnes payantes et avez besoin d'un suivi des conversions précis et validé pour que votre reporting et l'optimisation des plateformes travaillent à partir de chiffres réels.
- Vous voulez un flux produit propre, erreurs et refus détectés tôt plutôt que découverts quand la portée chute.
- Vous appréciez un second avis mensuel sur les endroits où le budget est gaspillé, y compris une vue explicite “arrêtez de faire ceci”, plus des conseils d'adéquation de module pour votre configuration PrestaShop.
- Vous (ou votre acheteur média) gérez la gestion effective des campagnes et des enchères, et avez seulement besoin que la fondation reste solide, car Growth Care Plan ne gère pas les campagnes ni ne garantit le ROAS.
Vous pourriez vouloir davantage si…
Si vous voulez aussi que l'exploitation (surveillance, vérifications de santé du cœur et petites corrections telles que configuration, cache, cron et paramètres de modules) et le SEO technique soient pris en charge dans la même relation, Complete Care Plan combine Store Care Plan, SEO Care Plan et Growth Care Plan en une seule équipe responsable avec 10 heures par mois, une revue stratégique trimestrielle, et un rapport exécutif unique, plutôt que de faire tourner trois plans en parallèle. Growth Care Plan vous permet de commencer de façon ciblée avec uniquement la fondation des données marketing ; Complete Care Plan est l'étape supérieure lorsque vous voulez toute la boutique sous un même toit. Les 4 heures par mois incluses (plafond 8h, sans report) font avancer les petites corrections sans devis distinct à chaque fois.
Complete Care Plan combine Store Care Plan, SEO Care Plan et Growth Care Plan en une seule relation responsable, de sorte qu'une équipe unique est responsable de toute la boutique plutôt que trois prestataires possédant chacun une part. Il est conçu pour les boutiques qui ont dépassé le support fragmenté et veulent que l'exploitation, le SEO technique et la fondation des données marketing soient maintenus sous une revue régulière et coordonnée.
Ce qui est inclus
- Tout ce qui est dans Store Care Plan, surveillance, vérifications de santé du cœur et petites corrections opérationnelles telles que configuration, cache, cron, paramètres de modules et erreurs PHP évidentes.
- Tout ce qui est dans SEO Care Plan, santé du SEO technique maintenue sous revue pour que la boutique reste explorable, indexable et structurellement saine.
- Tout ce qui est dans Growth Care Plan, santé de GA4 et du suivi d'événements, validation du suivi des conversions, revue du flux produit et recommandations honnêtes.
- 10 heures par mois (plafond 18h, sans report) mutualisées sur l'ensemble. Les heures vont à l'exploitation, au SEO, au suivi et aux flux, non à la gestion des campagnes publicitaires.
- Revue stratégique trimestrielle, plus des conseils d'adéquation de module et de thème pour votre stack PrestaShop.
Comment cela fonctionne
Au lieu de trois rapports déconnectés, vous obtenez un tableau de bord exécutif plus un rapport mensuel qui rassemble tout : chaque score de santé, le registre des heures montrant exactement où le temps est passé, les actions menées, les risques ouverts, et une feuille de route pour le mois suivant. Cela signifie une seule liste de priorités, l'équipe décide où les heures du mois créent le plus de valeur entre exploitation, SEO et suivi, plutôt que trois plans qui se disputent l'attention.
Il vaut la peine d'être clair sur ce que Complete Care Plan n'est pas : il ne gère pas les campagnes, ne gère pas les enchères, et ne garantit ni classement, ni trafic, ni ROAS. Comme les plans Care individuels, le ton est mesuré et honnête, il garde les fondations solides et vous dit clairement ce qu'il vaut la peine de faire ensuite. Si vous n'avez besoin que d'un seul de ces domaines, les plans individuels (Store Care Plan, SEO Care Plan, Growth Care Plan) vous permettent de commencer plus étroitement et de monter en gamme plus tard.
Complete Care Plan inclut 10 heures par mois (sans report, plafond 18h) de travail concret, mutualisées et réparties entre exploitation, SEO, suivi et flux. Parce qu'il s'agit d'un pool partagé unique plutôt que de trois allocations distinctes, l'équipe peut diriger les heures là où elles créent le plus de valeur un mois donné, une correction de SEO technique un mois, une réparation de suivi ou un nettoyage de flux le suivant, sans jongler avec trois budgets. Les heures vont au travail opérationnel, SEO, de suivi et de flux ; elles ne sont pas consacrées à la gestion des campagnes publicitaires.
SLA de réponse
- Incidents P1 vitrine / tunnel de commande, sous 3 heures ouvrées. Lorsque la boutique est hors service ou que les clients ne peuvent pas finaliser leur commande, le chiffre d'affaires saigne à la minute, ces cas obtiennent donc l'engagement le plus rapide.
- Problèmes SEO / marketing, sous 1 jour ouvré. Le travail important mais non critique-à-l'heure pour le chiffre d'affaires, signaux de classement, questions de suivi, ajustements de flux. Est accusé réception et entamé sous un jour ouvré.
Disponibilité et couverture en continu
Complete Care Plan vise 99,7 % de disponibilité surveillée. Il s'agit d'un objectif de surveillance et de réponse, nous surveillons la disponibilité en continu et répondons au regard des SLA ci-dessus, et non d'une garantie de zéro indisponibilité, puisque l'hébergement, les réseaux et les services tiers peuvent tous défaillir en dehors de notre contrôle. Pour les boutiques qui ont besoin d'une couverture en dehors des heures ouvrées, il existe une option d'urgence 24/7 qui étend la réponse aux incidents en continu.
Ce sont des engagements de réponse, la rapidité avec laquelle nous nous engageons et commençons le travail, la correction proprement dite puisant dans les heures mensuelles (et le plafond de 18h pour les mois exceptionnellement chargés). C'est le même cadrage honnête que les plans Care individuels : des niveaux clairs, un objectif de disponibilité mesuré, et aucune promesse de résultat.
Les domaines de service sont les mêmes briques de base dans les deux cas. La différence est la responsabilité et la coordination. Achetez Store Care Plan, SEO Care Plan et Growth Care Plan séparément et vous obtenez trois relations, trois arriérés et trois rapports, chacun optimisant son propre coin. Avec Complete Care Plan, vous obtenez une seule équipe responsable de toute la boutique, ce qui change la façon dont le travail se déroule réellement.
Une seule liste de priorités, pas trois
Au lieu de trois plans qui se disputent l'attention, Complete Care Plan produit une seule liste de priorités et un rapport exécutif, chaque score, le registre des heures, les actions menées, les risques ouverts et la feuille de route du mois suivant en un seul endroit. Quand quelque chose compte plus ce mois-ci que le précédent, l'équipe dirige simplement l'effort partagé vers ce point, plutôt que vous arbitrant entre des prestataires distincts.
Un pool d'heures combiné et plus flexible
Les 10 heures par mois de Complete Care Plan (plafond 18h, sans report) sont dans un seul pool entre exploitation, SEO, suivi et flux. C'est plus flexible que trois allocations fixes : un mois chargé en SEO technique et léger en suivi utilise simplement les heures là où elles sont nécessaires, au lieu de laisser du temps inutilisé dans un plan tandis qu'un autre est à court.
Une stratégie qui relie le tout
La revue stratégique trimestrielle relie exploitation, SEO et marketing en une seule direction, par exemple, en veillant à ce qu'un changement SEO, une correction de suivi et une mise à jour opérationnelle se renforcent mutuellement plutôt que de tirer dans des directions différentes. En achetant les plans individuellement, personne ne possède cette vue transversale.
En bref : séparément, vous obtenez trois services compétents mais cloisonnés ; combinés, vous obtenez une seule équipe responsable, un seul rapport, un pool d'heures partagé et flexible et une vue stratégique trimestrielle. Complete Care Plan ne fait toujours aucune garantie de résultat, ni classement, ni trafic, ni ROAS promis, il rend simplement l'ensemble plus facile à piloter depuis un seul endroit. Si vous n'avez réellement besoin que d'un seul domaine, commencer par le plan individuel est parfaitement sensé.
Complete Care Plan s'adresse aux boutiques sérieuses qui veulent une seule équipe responsable du maintien sous revue régulière des fondations d'exploitation, de SEO technique, de suivi et de flux, et une voix honnête sur ce qu'il vaut la peine de faire ensuite entre exploitation, SEO et marketing. Si vous avez atteint le point où jongler avec des prestataires distincts (ou tout faire vous-même) vous coûte plus en coordination que cela ne vous fait économiser, c'est le plan qui rassemble le tout.
Vous êtes un bon candidat si…
- Vous exploitez une boutique PrestaShop générant un chiffre d'affaires significatif où une indisponibilité, un tunnel de commande cassé ou une défaillance de suivi a un coût réel, et vous voulez des SLA de réponse clairs derrière.
- Vous voulez une seule équipe responsable sur l'exploitation, le SEO technique et la couche de données marketing, une seule liste de priorités et un seul rapport exécutif au lieu de trois déconnectés.
- Vous appréciez une revue stratégique trimestrielle qui relie exploitation, SEO et marketing, plus des conseils d'adéquation de module et de thème pour votre stack.
- Vous appréciez un partenaire honnête et mesuré, qui garde les fondations solides, signale les risques clairement, et ne fait aucune promesse de classement, de trafic ou de ROAS.
Vous pourriez préférer commencer plus étroitement si…
Si vous n'avez besoin que d'un seul de ces domaines pour l'instant, les plans Care individuels vous permettent de commencer là où la douleur se trouve : Store Care Plan pour la stabilité opérationnelle, SEO Care Plan pour la santé du SEO technique, ou Growth Care Plan pour la fondation des données marketing. Vous pouvez toujours passer à Complete Care Plan plus tard, lorsque vous voulez tout sous un même toit. Les 10 heures par mois du plan combiné (plafond 18h, sans report), mutualisées sur tous les domaines, et son tableau de bord exécutif unique sont ce qui en fait le foyer naturel des boutiques qui ont dépassé le stade où l'on s'occupe de ces choses une à une, avec les heures allant à l'exploitation, au SEO, au suivi et aux flux plutôt qu'à la gestion des campagnes.
hide aux références de transporteur sélectionnées.hide retire le transporteur ciblé lorsque sa règle correspond. show_only conserve uniquement les transporteurs ciblés lorsqu'au moins l'un d'eux est actuellement disponible ; les règles correspondantes sont triées par priorité, et l'action show-only valide ayant la priorité la plus élevée l'emporte.actionCartGetPackageShippingCost. Sur PrestaShop 1.7 et 8, le module expose les résultats de supplément et de livraison gratuite dans les libellés, les données frontend et la sortie du simulateur, mais ne modifie pas le coût de livraison natif facturé.free_over compare son seuil au sous-total du panier hors taxes. Les montants de supplément fixe sont également configurés hors taxes et peuvent être convertis de la devise par défaut de la boutique vers la devise du panier lors de l'évaluation.EvaluationRequest et exécute le RuleEngine partagé, puis affiche les décisions de transporteur, les règles correspondantes, les traces de conditions, les lignes de supplément, les libellés finaux, les valeurs ETA et les avertissements d'absence de transporteur.NO CARRIER LEFT. Dans les données de checkout, le module expose has_no_carrier_left ; la couche frontend 1.7 peut afficher une bannière d'absence de transporteur, et la protection de sélection du transporteur efface le transporteur sélectionné s'il est devenu masqué.match_priority du flux, par exemple ean,sku,supplier_id. Les mappings existants du module sont réutilisés lorsqu'ils sont cohérents, les clés de flux en double sont bloquées, et les correspondances basées uniquement sur la référence fournisseur sont traitées par défaut comme peu fiables.create_missing et les options de synchronisation concernées sont activés. La création reste limitée par des paramètres de sécurité comme le nombre maximal de créations de produits, le nombre maximal de créations de déclinaisons et les plafonds de pourcentage de création.location_quantities ; lorsque sync_location_stock est activé, le module enregistre le stock par emplacement et met à jour le stock agrégé de la boutique selon la stratégie sélectionnée. Les emplacements peuvent rester virtuels ou être mappés vers des entrepôts PrestaShop Advanced Stock Management.pourcentage, un montant fixe ou un prix cible fixe sur une plage de dates de début et de fin définie.priorité. Lorsque plusieurs campagnes correspondent au même produit en même temps, celle dont la priorité est la plus élevée l'emporte, ce qui rend les prix prévisibles.Vous pouvez mettre à jour soit le prix de vente, soit le prix d'achat (prix de revient). Chaque exécution ne traite qu'un seul champ de prix, de sorte qu'un lot ne modifie jamais les deux en même temps. Les ajustements de vente et de coût restent ainsi séparés et prévisibles.
Une fois connectés, les clients voient dans leur espace Mon compte un lien vers le compte professionnel qui ouvre une page de demande. Ils y renseignent leur raison sociale, leur numéro de TVA, leurs références commerciales, leur type d'activité et un message facultatif. La demande arrive ensuite dans une file d'attente de votre back-office pour examen.
Chaque exécution est délimitée. Vous pouvez cibler tous les produits actifs ou restreindre la sélection à une seule catégorie, un fabricant ou un fournisseur avant d'appliquer. Le périmètre choisi est enregistré avec l'exécution, vous savez donc toujours quels produits ont été concernés.
Oui. Vous pouvez conserver le fonctionnement manuel par défaut, où votre équipe approuve ou refuse chaque demande depuis la file du back-office, ou activer l'approbation automatique pour que les nouvelles demandes obtiennent immédiatement le statut professionnel. C'est un seul réglage, vous pouvez donc commencer en manuel puis automatiser.
Oui. L'aperçu affiche chaque produit concerné avec son identifiant, son nom, le prix actuel, le nouveau prix et l'écart, afin de vérifier le résultat exact avant de valider. Rien n'est écrit dans le catalogue tant que vous n'avez pas confirmé le lot.
Lorsque vous approuvez une demande, le groupe de clients que vous avez configuré comme groupe professionnel est ajouté à ce client et défini comme son groupe par défaut. Il voit alors les tarifs de gros ou l'accès B2B que vous gérez déjà via les groupes de clients PrestaShop, sans aucune modification manuelle de groupe de votre côté.
Vous pouvez rendre obligatoires, indépendamment les uns des autres, la raison sociale, le numéro de TVA et les références commerciales, afin que le formulaire corresponde à votre niveau de vérification. Le type d'activité et un message libre sont aussi collectés comme contexte, et le formulaire de la boutique valide les champs requis avant l'envoi de la demande.
Vous pouvez appliquer une augmentation en pourcentage, une baisse en pourcentage, une augmentation fixe ou une baisse fixe. Les baisses sont bloquées à zéro, de sorte qu'un prix ne peut jamais devenir négatif. Les valeurs sont traitées avec une précision décimale.
Oui. Un client qui a déjà une demande en attente ou approuvée ne peut pas en soumettre une autre, ce qui évite d'encombrer votre file d'examen avec des doublons. Son espace Mon compte affiche à la place l'état actuel : à demander, en attente, actif ou refusé.
Des e-mails facultatifs tiennent les deux parties informées : votre équipe peut être avertie lorsqu'une nouvelle demande est envoyée, et le client peut recevoir un e-mail lorsque son statut change. Chaque notification est un réglage distinct, vous n'activez donc que celles dont votre organisation a besoin.
Les mises à jour s'exécutent sous forme de tâches avec une heure d'exécution planifiée, et le module fournit un point d'entrée cron pour traiter les lots automatiquement en arrière-plan. Les tâches sont verrouillées pendant leur exécution afin d'éviter que deux traitements se chevauchent sur le même catalogue.
Chaque exécution réussie est enregistrée avec la formule, le périmètre, le champ de prix, le nombre de produits concernés, le membre du personnel qui l'a appliquée et la date. Votre équipe dispose ainsi d'une piste d'audit claire pour les changements de prix sensibles.
Oui. Créez un compte sur chatra.io, puis ouvrez Paramètres > Général > Code du widget et copiez le Widget ID depuis l'extrait d'installation. Collez cet identifiant dans le champ Widget ID du module. Tant qu'aucun Widget ID n'est enregistré, le module reste inactif et le back-office affiche un rappel : le widget ne se charge donc jamais sans un identifiant valide.
Oui. Un interrupteur de visibilité mobile permet de masquer le widget sur les écrans mobiles tout en le conservant sur ordinateur. Lorsqu'il est désactivé, le module ignore complètement le script Chatra sur mobile : aucun bouton de chat n'est ajouté sur les téléphones et aucun script supplémentaire n'y est chargé.
Filter Revolution se connecte via le fournisseur de recherche de produits de PrestaShop et ne prend le contrôle d'une page de liste que lorsque vous avez créé un modèle de filtre pour ce contexte. Il prend en charge les pages catégorie, recherche, fabricant, fournisseur, meilleures ventes, nouveaux produits et promotions.
Si aucun modèle n'est affecté à la page consultée, le module rend la main à PrestaShop, de sorte que votre navigation à facettes existante ou native continue de fonctionner sans changement à cet endroit. Vous pouvez ainsi le déployer progressivement, catégorie par catégorie, plutôt que de basculer toute la boutique d'un coup. Il fonctionne sur PrestaShop 1.7.6 et versions ultérieures, y compris 8.x et 9.x.
Non. Le module bascule les règles de routage d'URL intégrées de PrestaShop vers des formats propres et sans identifiant depuis le back-office, et gère les redirections des anciennes vers les nouvelles adresses via son propre contrôleur front-office. Vous ne touchez ni à la configuration serveur, ni au .htaccess, ni aux fichiers du thème. La désinstallation rétablit les règles de routage d'origine de PrestaShop.
Support Revolution fonctionne sous PrestaShop 1.7, 8.x et 9.x. Une couche de compatibilité interne permet à ses modèles de données (tickets, départements, base de connaissances) de fonctionner sur ces trois versions ; le même ZIP s'installe donc sur chacune d'elles.
La seule fonction avec une exigence supplémentaire est la réception optionnelle des e-mails en tickets via IMAP : elle nécessite l'extension PHP imap sur votre serveur. Si cette extension est absente, le reste du helpdesk fonctionne normalement. Seule cette réception par e-mail est indisponible.
Oui. L'option Autoriser les tickets invités est activée par défaut : un visiteur non connecté peut donc envoyer un ticket avec son nom, son e-mail, un sujet et un message.
Chaque ticket invité reçoit un lien privé sécurisé reposant sur un jeton de 64 caractères, qui permet au visiteur de suivre ce ticket précis et d'y répondre sans compte. Si vous préférez imposer la connexion, désactivez l'option dans les réglages du module : seuls les clients connectés pourront alors ouvrir des tickets.
Chaque groupe de filtres peut être affiché avec le contrôle adapté à ses valeurs : cases à cocher et boutons radio pour les listes courtes, une liste déroulante pour les longues listes, un curseur de plage pour les prix et les valeurs numériques, des pastilles de couleur et des vignettes d'image.
Les clients peuvent filtrer par attributs de produit (comme la taille ou la couleur), caractéristiques, fourchette de prix, fabricant ou marque, et disponibilité en stock. Les pastilles de couleur et vignettes d'image sont associées automatiquement à partir des images présentes pour chaque valeur d'attribut, et chaque libellé de facette est lu dans la langue du visiteur, de sorte qu'un même modèle affiche le bon texte dans chaque langue de la boutique.
Non. Lorsque notre module SEO Revolution est installé et activé, Friendly URL Manager lui délègue automatiquement la gestion des URL afin que les deux ne se disputent pas les mêmes routes. Utilisé seul, il prend lui-même en charge la logique des URL propres et des redirections. En règle générale, ne gardez qu'un seul moteur d'URL actif pour éviter les réécritures conflictuelles.
Par défaut, chaque pièce jointe est limitée à 10 Mo, et les extensions autorisées sont jpg, jpeg, png, gif, pdf, doc, docx, xls, xlsx, txt, zip, rar.
La taille maximale comme la liste des extensions se modifient dans les réglages du module. Avant d'enregistrer un fichier, le module vérifie son extension par rapport à votre liste, si bien que tout ce qui en est absent est refusé. Réduisez la liste si vous souhaitez accepter moins de types de fichiers.
Vous créez un modèle de filtre réutilisable dans le back-office, ajoutez les groupes de filtres souhaités (attributs, caractéristiques, prix, marque, stock), les classez dans l'ordre de votre choix, puis affectez ce modèle à une ou plusieurs catégories à l'aide du sélecteur de catégories.
Les modèles sont enregistrés par boutique, ce qui permet à différentes boutiques d'une installation multiboutique d'utiliser des configurations de filtres différentes, et chaque modèle est associé à un type de contrôleur de liste tel que catégorie, recherche ou fabricant. Comme les modèles sont réutilisables, vous pouvez appliquer la même disposition de filtres à de nombreuses catégories au lieu de configurer chacune manuellement.
Oui. Les formats d'URL, les liens en cache, les redirections enregistrées et les surcharges manuelles sont tous stockés par langue et par boutique. Ainsi, chaque boutique et chaque langue conserve ses propres adresses propres et son propre historique de redirections dans une installation multiboutique.
Oui. Vous pouvez verrouiller une URL personnalisée sur un produit, une catégorie, une page CMS, une marque ou un fournisseur précis, ou faire pointer une adresse vers une autre entité ou une URL cible personnalisée. Chaque surcharge vous laisse choisir le type de redirection - 301 permanente ou 302/307 temporaire - limité à la langue et à la boutique que vous choisissez.
Non. Le module répond au hook d'export de données RGPD de PrestaShop en indiquant qu'il ne stocke aucune donnée personnelle sur le serveur, car le filtrage repose sur vos données de catalogue et d'index existantes, et non sur des profils clients.
Le limiteur de débit anti-abus optionnel, qui ne s'active que lorsqu'un robot sature les URL de filtres, fonctionne avec des compteurs Redis éphémères et ne conserve aucune donnée personnelle. C'est pourquoi la fiche indique que ce module n'est pas concerné par le RGPD.
En option, oui, via la réception IMAP, mais elle est désactivée par défaut. Une fois activée, avec l'hôte de la boîte, l'identifiant et le mot de passe renseignés, un relevé planifié lit les messages non lus de la boîte.
Si l'objet d'un message contient une référence de ticket existante (votre préfixe configuré, p. ex. SR-00001), l'e-mail est ajouté comme réponse à ce ticket ; sinon un nouveau ticket est créé à partir de lui. Cela nécessite l'extension PHP imap et une tâche cron appelant le point d'entrée cron du module avec votre jeton.
Un ticket enregistre l'identité du client, l'ensemble du fil de messages, le département, la priorité et le statut, la boutique concernée ainsi que l'adresse IP de l'expéditeur, ce qui constitue un véritable historique de support dans PrestaShop.
Le formulaire en boutique exige une case de consentement RGPD explicite ; si elle n'est pas cochée, le ticket n'est pas créé. Les notes internes du personnel sont stockées à part et ne sont jamais affichées dans la conversation visible par le client.
Le module est conçu pour garder rapides les pages de liste très fréquentées sans alourdir votre base de données. Il lit dans les tables d'index existantes de PrestaShop et maintient des agrégats de comptage de facettes compacts et précalculés, de sorte que la boutique n'exécute pas de requêtes lourdes en direct pour chaque filtre à chaque requête.
Vous pouvez reconstruire ces agrégats et vérifier l'état de l'index depuis le tableau de bord du back-office, et les combinaisons de filtres sans produit peuvent être masquées pour que les clients et les robots n'atterrissent pas sur des pages vides. Les temps de réponse des filtres restent ainsi stables à mesure que le catalogue grandit.
Vous décidez par type d'entité. Une page supprimée ou désactivée peut être redirigée vers sa catégorie parente, redirigée vers la page d'accueil, renvoyer une erreur 410 Gone ou ne rien faire ; son ancienne adresse est enregistrée dans l'historique des redirections afin que les liens entrants continuent d'aboutir au lieu de tomber sur une véritable erreur 404.
Ils le peuvent, si vous le souhaitez. Le réglage Fermer automatiquement après vaut 14 jours par défaut : une tâche planifiée ferme les tickets résolus restés sans activité pendant ce nombre de jours. Mettez la valeur à 0 pour désactiver totalement la fermeture automatique.
La tâche s'exécute via le point d'entrée cron du module, soit la commande CLI cron.php --token=VOTRE_JETON, soit un appel URL avec le même jeton, c'est-à-dire le même planificateur que celui qui relève l'IMAP.
Le module déclare une compatibilité de PrestaShop 1.6.1.0 jusqu'à la version 9.x actuelle, et nécessite PHP 7.1 ou plus récent. Il conserve des chemins de code distincts pour PS 1.6 et 1.7+ (par exemple la page de commande de l'admin et la gestion des adresses), de sorte que les outils financiers fonctionnent que vous soyez encore sur une boutique 1.6 ou sur PrestaShop 8 ou 9.
Il fonctionne en parallèle. L'écran Documents répertorie vos factures de commande PrestaShop existantes, référence de commande, client, e-mail, totaux, livraison, état de la commande, date et le téléchargement du PDF natif, au lieu de remplacer la facturation du cœur. Il ajoute par-dessus des flux de correction (avoir) et de proforma, y compris la conversion d'une proforma en facture lorsque la commande le permet. Vos factures PrestaShop natives restent la source de vérité.
Pour les numéros de TVA de l'UE, le module appelle le service officiel VIES de l'UE (le point d'accès SOAP checkVatService) pour obtenir une réponse valide/invalide faisant autorité. Si VIES est injoignable ou expire, il ne vous bloque pas, il revient à une vérification du format seul et enregistre le résultat avec sa source (vies ou format), afin que vous voyiez toujours si un numéro a été confirmé de façon autoritative ou seulement validé au format. Les numéros hors UE ne sont vérifiés qu'au format, car VIES ne les couvre pas.
Pour la déclaration de TVA, le module stocke les numéros de TVA des clients avec la source de validation, les données renvoyées par la vérification, les éventuels messages et des horodatages dans ses propres tables. Il s'agit de données commerciales/fiscales que vous, en tant que marchand, contrôlez et devez généralement conserver à des fins comptables. Il n'envoie ces données à aucun tiers en dehors de la requête VIES de l'UE elle-même et n'enregistre pas de hooks RGPD automatiques d'export/suppression de PrestaShop, donc si un client demande l'effacement, vous supprimez son enregistrement de TVA directement dans l'admin.
Oui. Les tables du module, enregistrements financiers, coûts, documents, données de TVA et paramètres, comportent toutes une colonne id_shop, de sorte que les entrées sont rattachées à la boutique à laquelle elles appartiennent. Chaque boutique conserve ses propres chiffres, sa numérotation de documents et sa configuration, plutôt que de partager un grand livre commun sur toute la multiboutique.
Les deux, selon le type d'enregistrement. Les enregistrements côté revenus sont créés automatiquement : le module s'accroche à la validation des commandes et aux changements de statut des commandes et garantit qu'un enregistrement financier existe pour chaque commande. Les coûts et dépenses sont saisis par vous, chaque coût porte une référence, un partenaire, une catégorie, des montants hors taxe et TTC, des montants remboursés/remisés, un statut de paiement, une date d'échéance, des pièces jointes et une affectation facultative à un produit ou une catégorie, afin que les chiffres de bénéfice et de TVA reflètent les dépenses fournisseurs réelles.
Ce module charge le script de suivi tiers d'ActiveCampaign (diffuser.js depuis diffuser-cdn.app-us1.com) directement dans le navigateur du visiteur. Il s'affiche dès que le module est activé et qu'un identifiant de compte est enregistré, le code ne contient aucun gestionnaire de consentement, la gestion du consentement vous incombe donc.
La seule donnée personnelle transmise par le module lui-même est l'adresse e-mail d'un client connecté, envoyée via vgo('setEmail', ...) afin de relier les visites au bon contact. Les visiteurs anonymes sont suivis sans e-mail. Le module ne stocke que deux réglages dans PrestaShop (ENABLED et ACCOUNT_ID) et ne conserve aucune donnée de visiteur.
Comme il s'agit d'un suivi marketing/analytique pouvant transmettre un identifiant personnel, chargez-le derrière votre mécanisme de consentement là où la loi l'exige et mentionnez ActiveCampaign dans votre politique de confidentialité.
Non. Cette intégration utilise uniquement le suivi de site côté client d'ActiveCampaign. La seule valeur requise est l'identifiant de compte numérique, que vous copiez dans Paramètres > Suivi > Suivi de site dans ActiveCampaign.
Le module ne stocke que ENABLED et ACCOUNT_ID et insère le tracker officiel diffuser.js dans le navigateur. Il n'y a ni clé API, ni URL API, ni synchronisation serveur à serveur dans ce chemin de code : aucun identifiant d'API n'est stocké sur votre serveur ni envoyé depuis celui-ci : toutes les données circulent du navigateur du visiteur vers ActiveCampaign.
Pensez à activer le suivi de site dans votre compte ActiveCampaign, sinon les visites collectées par le script n'apparaîtront pas.
Le module vise PrestaShop 1.6 à 9.x et ne modifie aucun fichier de thème. Il enregistre un seul hook front-office, displayBeforeBodyClosingTag, et insère le script de suivi juste avant la balise de fermeture </body>, pas dans l'en-tête de la page.
Comme il dépend de ce hook, le script n'apparaît que si votre thème affiche réellement displayBeforeBodyClosingTag, ce que font les thèmes PrestaShop standard. Rien n'est copié dans un template, donc un changement ou une mise à jour de thème ne fera pas perdre l'intégration.
Si le suivi n'apparaît jamais dans le code source, vérifiez que le module est activé, que l'identifiant de compte est renseigné et que votre thème personnalisé appelle displayBeforeBodyClosingTag en fin de page.
Le module est compatible de PrestaShop 1.6.1.0 jusqu'à la version actuelle, il fonctionne donc sur 1.6, 1.7, 8.x et 9.x. La protection du site marchand ne s'applique que lorsque le module est actif, et les écrans du back-office restent accessibles même protection désactivée : l'activation ne vous enfermera pas hors de votre boutique.
Non. Le pare-feu démarre en mode surveillance : après l'installation, il journalise les requêtes qui seraient bloquées sans réellement les arrêter. Vous examinez d'abord ces journaux de tentatives bloquées et les données de sécurité, puis vous passez en mode application une fois sûr que les règles sont sûres. Les limites de débit se configurent par type d'action (inscription, contact, commentaires, panier) plutôt qu'avec un seul seuil global.
Le module fournit une issue de secours en ligne de commande, à lancer sur le serveur : elle fonctionne donc même si vous ne pouvez plus vous connecter : php bin/console mprsecurityrevolution:admin-security:escape. Utilisez --disable-enforcement pour désactiver le verrouillage de connexion, la barrière 2FA, l'obligation de 2FA, le verrou session-IP et les contrôles de ré-authentification ; --clear-lockouts pour effacer les verrouillages ; --trust-ip pour ajouter une IP ou un CIDR admin de confiance ; ou --all pour tout faire à la fois.
Les contrôles de protection et de surveillance s'exécutent lors des requêtes de page normales : la défense principale ne dépend donc pas du cron. Une tâche cron est nécessaire pour la maintenance planifiée et les sauvegardes : cron.php (appelé avec un jeton de sécurité affiché dans le panneau d'administration) exécute des tâches de nettoyage qui purgent les anciens journaux de sécurité, les enregistrements de limite de débit expirés, les tentatives bloquées, les journaux de requêtes et les données de session/pages vues, et pilote les sauvegardes planifiées. Sans cron, ces tâches ne s'exécutent pas et les tables de journaux continuent de grossir.
L'inscription, les formulaires de contact et les commentaires produits sont protégés par plusieurs couches : un champ honeypot invisible, des limites de débit par action, le rejet des domaines e-mail jetables ou bloqués, et une analyse du contenu détectant le charabia, l'excès de liens et les saisies risquées ou abusives. Chaque type d'action (inscription, contact, commentaire, panier) a ses propres limites, vous pouvez donc être strict sur les inscriptions sans freiner la navigation normale. Toutes les données de suivi et de sécurité restent dans la base de votre propre boutique, rien n'est envoyé à un service tiers, et les tâches de nettoyage intégrées les purgent selon un calendrier.
Dans les réglages du module, vous choisissez l'un des trois fournisseurs : Google reCAPTCHA v2 (la case à cocher « Je ne suis pas un robot »), Google reCAPTCHA v3 (invisible, basé sur un score) ou hCaptcha (une alternative à case à cocher respectueuse de la vie privée). Un seul fournisseur est actif à la fois et s'applique à tous les formulaires protégés.
reCAPTCHA v2 et hCaptcha présentent un widget au visiteur, tandis que reCAPTCHA v3 s'exécute discrètement en arrière-plan et renvoie un score de 0 à 1. Avec la v3, vous définissez aussi un seuil de score (0,5 par défaut) pour ajuster la sévérité du contrôle invisible sans changer de fournisseur.
Oui. Le module n'exécute pas son propre service CAPTCHA : il se connecte à Google ou à hCaptcha. Vous créez donc un compte gratuit chez le fournisseur choisi, générez une clé de site et une clé secrète, puis collez les deux dans les réglages du module.
La protection reste totalement inactive tant que le module n'est pas activé et que les deux clés ne sont pas renseignées. Avant cela, aucun widget n'est affiché et aucune soumission n'est vérifiée, si bien qu'une configuration incomplète ne peut jamais bloquer ni casser vos formulaires clients. Le back-office affiche aussi un avis indiquant quelles clés manquent encore.
Lors de l'envoi d'un formulaire protégé, le module transmet le jeton de réponse CAPTCHA, votre clé secrète et l'adresse IP du visiteur au service de vérification du fournisseur (le service siteverify de Google ou de hCaptcha) pour confirmer la réponse. Le widget JavaScript du fournisseur se charge aussi dans le navigateur du visiteur, comme sur tout site utilisant reCAPTCHA ou hCaptcha.
Le module lui-même ne stocke ni le jeton, ni le score, ni les données du visiteur dans votre base de données. Comme un service tiers intervient, l'usage d'un CAPTCHA relève du RGPD : mentionnez donc le fournisseur choisi dans votre politique de confidentialité. C'est pour cela que, sur la page contact, le widget est affiché via la zone de consentement RGPD.
reCAPTCHA v3 renvoie un score entre 0 et 1 pour chaque soumission. Le module le compare au seuil que vous définissez (0,5 par défaut) : les soumissions qui l'atteignent ou le dépassent passent, les plus basses sont considérées comme automatisées et bloquées. Un seuil plus élevé est plus strict, un seuil plus bas plus permissif.
Comme le score invisible peut parfois mal juger un vrai client, vous pouvez activer un repli par case à cocher facultatif. Lorsqu'une soumission v3 est sous le seuil, le visiteur doit valider une case reCAPTCHA v2 (avec une paire de clés v2 distincte) pour prouver qu'il est humain et continuer, les clients légitimes ne se retrouvent donc pas dans une impasse.
Non. Le module détecte lorsque le module natif contactform de PrestaShop est actif et s'affiche déjà dans la zone de contact ; dans ce cas, il n'y ajoute pas un second widget. Il place plutôt le CAPTCHA via la zone de consentement RGPD de la page contact, de sorte que vous obtenez un seul CAPTCHA au bon endroit plutôt que deux widgets superposés.
Ce traitement est propre au formulaire de contact. Les formulaires de connexion, d'inscription et de newsletter affichent chacun leur propre CAPTCHA via leur hook dédié, et chaque formulaire a son propre interrupteur pour ne protéger que ceux que vous voulez.
Il cible PrestaShop 1.6, 1.7, 8.x et 9.x, le module déclare une compatibilité de la version 1.6.0.0 jusqu'à votre version installée, et fonctionne sous PHP 7.1+. Le repli iframe GTM en
Oui. Si le module de consentement mprcookiesrevolution est installé et activé, ce module réorganise automatiquement son hook d'en-tête pour qu'il se charge en dernier, afin que les valeurs par défaut du mode Consentement de la CMP soient définies avant le chargement du conteneur GTM (gtm.js). Si aucune CMP n'est présente et que l'option de repli de consentement est activée, le module émet une valeur par défaut Google Consent Mode v2 denied pour ad_storage, ad_user_data, ad_personalization et analytics_storage avant le démarrage de GTM, de sorte que vos balises de mode Consentement disposent toujours d'un état défini.
Oui. Lorsque l'option d'exclusion des employés est activée, les membres du personnel connectés au back-office ne sont pas suivis. Les robots et outils d'audit connus (Googlebot, Bingbot, SemrushBot, AhrefsBot, Lighthouse/PageSpeed, Pingdom et d'autres) sont détectés par leur user-agent et ignorés, et tout visiteur portant le cookie de désinscription mpr_notrack est exclu. Le suivi ne s'exécute que sur les pages du front-office, pas dans l'administration ni sur les appels AJAX/API.
Pas si le repli Measurement Protocol est activé. À la validation de la commande, le module peut envoyer l'achat côté serveur directement à GA4 (Measurement Protocol), de sorte que la vente est enregistrée même si l'acheteur n'atteint jamais la page de confirmation, bloque la balise ou refuse le consentement côté client. Google déduplique via le transaction_id : si l'événement navigateur se déclenche aussi, la commande n'est pas comptée deux fois. Cela nécessite un identifiant de mesure GA4 (G-XXXXXX) et un secret d'API dans la configuration.
Enhanced Conversions ne s'exécute que lorsque l'option est activée et que le client est connecté. Le module pousse l'e-mail, le prénom, le nom, le téléphone, la ville, le code postal et la région du client dans le dataLayer sous forme de hachages SHA256, jamais en clair, sous un événement enhanced_conversions_data. Aucune donnée personnelle brute ne quitte le navigateur via ce push ; seules les valeurs hachées que Google attend pour la correspondance des conversions.
Non. Le bouton est livré sous forme d'un seul template inline : son CSS et son JavaScript sont intégrés directement dans la sortie du pied de page, donc aucun fichier .css ou .js supplémentaire n'est chargé côté front-office et aucune requête HTTP additionnelle n'est ajoutée.
Il ne charge ni jQuery ni aucune bibliothèque externe. Le défilement vers le haut utilise la fonction native du navigateur window.scrollTo({ top: 0, behavior: 'smooth' }), et l'écouteur de défilement est enregistré avec { passive: true } afin de ne jamais bloquer le défilement. Le module définit également un indicateur buttonRendered pour que le bouton ne soit affiché qu'une seule fois par page, même si votre thème déclenche plusieurs hooks pris en charge.
Le balisage généré est un unique <button> de 48x48 pixels avec une icône flèche SVG inline, l'impact sur le poids de la page est donc minime.
Non. Le bouton relève d'un comportement visuel purement côté client. Il ne dépose aucun cookie, n'écrit rien dans localStorage, n'envoie aucune requête AJAX ou d'analyse et n'appelle aucun service externe ou tiers.
Le template généré ne contient qu'un bloc <style>, un <button> et un petit <script> autonome qui bascule une classe CSS lors du défilement et remonte en haut au clic. Comme aucune donnée personnelle n'est lue, stockée ou transmise, le bouton n'ajoute aucune obligation RGPD ou de consentement aux cookies qui lui soit propre.
Il est conçu pour une large compatibilité. Le module déclare la prise en charge de PrestaShop 1.6.0.0 jusqu'à votre version installée, et il s'affiche via les hooks standards displayFooter, displayFooterAfter et displayBeforeBodyClosingTag - ainsi tout thème qui exécute au moins l'un d'eux affichera le bouton, et c'est le premier hook déclenché qui est utilisé.
Le bouton utilise position: fixed avec un z-index élevé, il flotte donc au-dessus du contenu de la page sur les mises en page desktop comme mobile/tactile, et il apparaît dès que le visiteur dépasse le seuil de pixels configuré. Aucune modification de fichier de thème n'est nécessaire - installer et activer le module suffit.
Le moteur est auto-hébergé. Les requêtes sont comparées à votre propre index en base de données, et toutes les statistiques, termes recherchés, clics et recherches sans résultat, sont stockées dans les tables du module, au sein de votre base PrestaShop. Rien n'est envoyé à un cloud de recherche tiers par défaut.
L'historique de recherche des clients connectés est enregistré par client et peut être effacé par l'acheteur. L'attribution clic-vers-commande utilise un cookie propriétaire d'une durée par défaut de 30 jours. Une fonction de recherche IA optionnelle peut appeler un fournisseur d'IA externe, mais elle est désactivée par défaut et ne s'active que si vous l'activez et fournissez votre propre clé API.
Le module déclare une compatibilité de PrestaShop 1.6 jusqu'à la version en cours d'exécution (ps_versions_compliancy min 1.6.0.0) et nécessite PHP 7.2 ou plus récent.
Le chargement des ressources s'adapte à la plateforme : sur PrestaShop 1.7 et versions ultérieures, il enregistre son CSS et son JavaScript via actionFrontControllerSetMedia, tandis que sur 1.6 il les charge depuis displayHeader avec addCSS/addJS. Le même hook displayHeader injecte les réglages dans window.mprcustomerpassword_config.
Le script front gère les deux générations de formulaires : il cible le champ password de PrestaShop 1.7+ ainsi que les champs passwd et confirmation de 1.6. L'e-mail de lien de configuration utilise reset_password_token sur les objets client 1.7+ et une mise à jour SQL héritée sur 1.6. Le module enregistre trois hooks : displayHeader, actionFrontControllerSetMedia et actionCustomerAccountAdd.
La longueur est configurable et vaut 12 par défaut, mais le générateur impose un minimum strict de 8 caractères même si vous définissez une valeur inférieure (Math.max(8, length)).
Les minuscules sont toujours incluses comme jeu de base. Trois interrupteurs indépendants ajoutent ensuite les majuscules, les chiffres et les caractères spéciaux (!@#$%^&*_+-=) ; par défaut, les trois sont activés. Lorsqu'un jeu est activé, le générateur garantit au moins un caractère de ce jeu, complète la longueur restante à partir du pool combiné et mélange le résultat via Fisher-Yates afin que les caractères requis ne restent pas à une position prévisible.
La génération se fait entièrement dans le navigateur dans front.js à partir des valeurs injectées via window.mprcustomerpassword_config (PWD_LENGTH, PWD_UPPERCASE, PWD_NUMBERS, PWD_SPECIAL). Un mot de passe est créé par page et la même valeur est écrite dans chaque champ de mot de passe et de confirmation correspondant.
Oui. Les synonymes, les mises en avant de produits, les redirections de recherche, les pages d'atterrissage SEO, les statistiques de requêtes et l'historique client enregistré sont tous cloisonnés par boutique : chaque boutique d'une installation multiboutique conserve sa propre configuration et ses propres données.
Vous pouvez ainsi définir des synonymes différents ou mettre en avant des produits différents pour une boutique sans affecter les autres, et les rapports de recherche de chaque boutique restent distincts.
Il est conçu pour PrestaShop 1.7, 8 et 9. La compatibilité déclarée va de 1.7.0 jusqu'à la version actuelle de PrestaShop, et fonctionne avec PHP 7.1 ou une version plus récente.
Le module crée et maintient automatiquement ses propres tables de base de données à l'installation et garde le schéma à jour, vous n'avez donc aucun SQL manuel à exécuter lors de l'installation ou de la mise à jour dans la plage prise en charge.
Non. Le module n'a pas de table de base de données propre pour les mots de passe ; sa configuration d'intégrité ne déclare aucune table critique. Le mot de passe est généré côté client dans le navigateur et soumis avec le formulaire de compte normal, puis PrestaShop le hache et le stocke exactement comme n'importe quel mot de passe client.
Ce qui est conservé ensuite dépend du mode e-mail. Avec send_password (par défaut), le mot de passe en clair est envoyé une seule fois au client. Avec setup_link, le module ne stocke qu'un jeton de réinitialisation à durée limitée, random_bytes(32) sur PrestaShop 1.7+ ou un jeton MD5 sur 1.6, valable 24 heures sur la fiche client, et envoie un lien de configuration au lieu du mot de passe. Avec silent, rien n'est stocké en plus et aucun e-mail de mot de passe n'est envoyé.
Comme la génération repose sur du JavaScript côté client, les clients ayant désactivé JavaScript voient simplement le champ de mot de passe normal sans remplissage automatique, et l'inscription standard de PrestaShop continue de fonctionner.
La recherche s'exécute sur votre propre serveur plutôt que via une API distante, il n'y a donc aucun aller-retour externe. Les requêtes sont en outre limitées pendant la saisie : un seuil de caractères minimum (2 par défaut) empêche toute requête sur une seule lettre, et un délai de temporisation (150 ms par défaut) regroupe les frappes rapides en une seule requête.
Les aperçus d'autocomplétion et le nombre de résultats sont plafonnés par des limites configurables, de sorte qu'un menu déroulant ne charge jamais plus de lignes que nécessaire. Tous ces seuils sont ajustables dans le Back Office selon la taille de votre catalogue et votre serveur.
Non. Après l'installation, il fonctionne avec des réglages par défaut pertinents, il améliore le champ de recherche existant de votre thème et renvoie produits, catégories, pages CMS, fabricants et fournisseurs au fur et à mesure de la saisie, avec la tolérance aux fautes de frappe déjà activée.
Les outils avancés, synonymes, mises en avant de produits, réécritures et redirections de requêtes, pages d'atterrissage SEO et simulateur de classement. Sont tous optionnels et gérés depuis le Back Office sans coder. Vous pouvez donc démarrer simplement et affiner la recherche au fil du temps grâce aux statistiques intégrées.
Le module prend en charge PrestaShop 1.6, 1.7, 8.x et 9.x. Il ajoute le script Microsoft Clarity via le hook d'en-tête de la boutique ; Clarity fonctionne donc avec son propre code de suivi asynchrone et vos enregistrements et heatmaps sont traités dans votre compte Microsoft Clarity, pas sur votre serveur. Le module ne crée pas de tables de base de données supplémentaires pour les données de suivi.
Le module déclare une compatibilité de PrestaShop 1.6.0.0 jusqu'à votre version installée, il fonctionne donc sous 1.6, 1.7, 8 et 9. Il enregistre deux hooks sur la page de commande, displayAdminOrder pour l'écran de commande de PrestaShop 1.6 et displayAdminOrderMain pour l'écran de commande à partir de 1.7, afin que l'action de suppression apparaisse au bon endroit dans chaque version.
Oui. Le module propose deux réglages, activés par défaut : ENABLED, qui détermine si l'action de suppression apparaît sur la page de commande, et REQUIRE_CONFIRMATION, qui fait afficher au bouton une confirmation du navigateur avant de s'exécuter. Lorsque ENABLED est désactivé, le hook n'affiche rien et le personnel ne voit jamais le bouton. Vous réglez les deux depuis la page Réglages du module dans le back-office.
Vous pouvez exclure les sessions du back-office de Clarity. Lorsque l'option « Exclure la navigation des employés » est activée, ce qui est le cas par défaut, le module ne charge pas le script Clarity pendant qu'un employé connecté navigue sur la boutique, de sorte que les visites de votre équipe ne sont pas enregistrées. Les sessions des clients sont toujours suivies normalement.
Oui. Le module appelle la méthode native Order::delete() de PrestaShop, qui supprime la commande ainsi que les enregistrements liés gérés en cascade par le cœur, factures, détails de commande, mouvements de stock et lignes de paiement. La corbeille ne conserve pas de copie complète : elle stocke seulement un petit résumé JSON (id de commande, référence, id client, total payé, date de création et état actuel), c'est donc un journal de ce qui a été supprimé, pas une sauvegarde permettant de reconstruire la commande. Considérez la suppression comme définitive et réservez-la aux commandes de test, en double ou indésirables.
Le module ajoute le contexte d'achat sous forme de tags et d'événements de session Clarity : type de page et contrôleur, nom de produit, catégorie et identifiants, valeur du panier et de la commande, devise, nombre d'articles, référence de commande et terme de recherche. Il n'envoie pas de noms de clients, d'adresses e-mail, de mots de passe ni de données de paiement. Le suivi ne fonctionne que lorsque le module est activé avec un identifiant de projet valide et, le cas échéant, après l'obtention du consentement marketing.
Non. Automatic Internal SEO Linker n'agit qu'à l'intérieur des zones de contenu que vous configurez, descriptions de produits et de catégories, contenus CMS, textes de blog, de fabricants ou de fournisseurs. Avant toute insertion, il extrait le <body> de la page et laisse volontairement intacts le <head>, les blocs <script> et les données structurées JSON-LD : vos rich snippets et balises meta ne sont jamais réécrits.
Il ne compte les liens existants qu'à l'intérieur de ces zones de contenu, pas dans votre menu, votre en-tête ou votre fil d'Ariane. Les liens de navigation ne consomment donc jamais le budget de liens d'un groupe, et le module ne transforme pas vos entrées de menu ou votre fil d'Ariane en ancres supplémentaires. Par défaut, il ignore aussi les titres, évite le texte déjà lié et ne lie jamais une page à elle-même.
Le module est conçu pour PrestaShop 1.6, 1.7, 8.x et 9.x (compatibilité déclarée de 1.6.1.0 à 9.x) et fonctionne avec les versions PHP standard livrées avec ces éditions. Il ne dépend pas d'un thème particulier.
Il fonctionne via le hook de sortie actionOutputHTMLBefore : il lit le HTML final de la boutique et injecte les liens dans la réponse au moment de son envoi. Il ne modifie jamais les fichiers de gabarit de votre thème et ne réécrit jamais les descriptions stockées dans votre base de données. Désactiver un groupe de liens ou désinstaller le module supprime immédiatement les liens générés, car ils n'étaient ajoutés qu'à la sortie et jamais enregistrés dans votre contenu.
Oui. Chaque groupe de liens peut définir ses propres attributs : une valeur rel (par exemple nofollow ou noopener), une cible (comme _self, ou _blank pour ouvrir dans un nouvel onglet) et une classe CSS. Une option permet aussi d'entourer l'ancre de <strong> pour un effet gras.
Lorsqu'un groupe laisse ces champs vides, les valeurs par défaut de la boutique s'appliquent : les liens s'ouvrent dans le même onglet (_self), l'attribut rel est vide et la classe CSS par défaut est mpr-autolink, que vous pouvez styliser dans votre thème. Les limites par page et par groupe (par défaut 5 liens par page et 3 par groupe) gardent un maillage naturel plutôt que du spam.
Non. Automatic Internal SEO Linker fonctionne entièrement côté serveur : sur chaque page du front-office, il lit vos groupes de liens enregistrés, examine le HTML déjà généré par PrestaShop et insère les ancres avant l'envoi de la réponse. Il ne stocke que votre propre configuration, les groupes de liens, mots-clés et réglages que vous créez dans le Back Office.
Il ne dépose aucun cookie, ne suit ni ne profile les visiteurs, ne stocke aucune donnée personnelle et n'appelle aucune API externe pour générer les liens. Comme aucune donnée de visiteur n'est collectée ni partagée, le module n'est pas concerné par le RGPD côté boutique.
Non. Le détecteur de doublons se contente de repérer et lister les doublons, il ne fusionne et ne supprime jamais rien de lui-même. Il recherche les produits en double (regroupés par nom, ou par référence, EAN-13, UPC ou ISBN), les catégories en double (même nom sous le même parent), les caractéristiques et valeurs de caractéristiques en double, ainsi que les groupes d'attributs et leurs valeurs en double, en affichant chaque groupe avec les identifiants correspondants pour vous permettre de les comparer.
Vous examinez ensuite les résultats et décidez vous-même quoi faire dans votre catalogue. C'est volontaire : fusionner des produits ou des attributs touche aux déclinaisons, au stock, aux prix et aux commandes passées ; le module vous laisse donc ces modifications irréversibles plutôt que de deviner quel enregistrement conserver.
Oui, et le module procède avec prudence. Il liste les dossiers de modules présents sur le disque mais non installés dans PrestaShop, et ne propose la suppression d'un dossier que s'il s'agit d'un module réellement désinstallé. Il ne supprimera pas un dossier dont le nom correspond, sans tenir compte de la casse, à un module installé (un dossier foo n'est donc jamais supprimé tant que Foo est installé), et il ne suit jamais les liens symboliques, deux situations fréquentes où un dossier "désinstallé" appartient en réalité à du code actif.
Par ailleurs, il détecte les tables de base de données orphelines et les clés de configuration restantes dont le module propriétaire n'est plus installé, mais celles-ci sont affichées pour vérification uniquement : le module ne supprime pas de tables ni de configuration à votre place. Comme pour chaque tâche, lancez d'abord l'aperçu et faites une sauvegarde avant de supprimer quoi que ce soit.
L'optimisation des tables exécute la commande MySQL OPTIMIZE TABLE pour récupérer l'espace libre laissé après de grandes suppressions. Le module mesure d'abord la fragmentation de chaque table (espace libre par rapport à la taille des données, lu depuis information_schema) et n'optimise que les tables situées au-dessus du seuil de fragmentation que vous avez configuré et disposant réellement d'espace à récupérer ; il ignore ainsi les tables sans intérêt. Chaque exécution enregistre l'espace libéré et la durée dans le journal d'audit.
Un point à anticiper : sous InnoDB, OPTIMIZE TABLE reconstruit la table et la verrouille pendant toute la durée de l'opération ; les grandes tables doivent donc être optimisées en dehors des heures de pointe. C'est pourquoi la planification intégrée place l'optimisation des tables dans une fenêtre nocturne hebdomadaire (04:00), distincte des nettoyages quotidiens de la base de données et des fichiers qui s'exécutent à 03:00 et 03:30.
Non. La liste de comparaison est entièrement stockée dans le localStorage du navigateur du visiteur, sous la clé mprcompare, et le module ne pose aucun cookie pour cela. Rien n'est écrit en base de données ni dans une session serveur : la fonction de comparaison ne contient donc aucune donnée personnelle et n'ajoute aucune exigence de consentement.
Ce choix a une conséquence : une sélection n'existe que dans le navigateur qui l'a créée, elle n'est pas partagée entre un téléphone et un ordinateur, et elle disparaît lorsque le visiteur efface les données du site.
Non, pas par défaut. Facebook Pixel comprend une option exclure les employés connectés, activée dès le départ : ainsi, lorsqu'une personne connectée au back-office de votre PrestaShop navigue sur la boutique, aucun événement Pixel ou Conversions API n'est envoyé pour elle. Pour éviter qu'une page mise en cache ne serve ensuite ce balisage sans événement à de vrais clients, le module ajoute également des en-têtes de cache no-store (y compris CDN et Cloudflare) sur ces visites d'employés. Désactivez l'option si vous préférez comptabiliser les sessions de votre équipe.
Le module déclare une compatibilité de PrestaShop 1.7.0.0 jusqu'à la série 9.x, et son code comporte deux jeux de hooks distincts. Sous 1.7, 8 et 9, il utilise actionFrontControllerSetMedia, displayAfterProductAddCartBtn, displayNav2 et displayBeforeBodyClosingTag, tandis que les thèmes 1.6 plus anciens s'appuient sur displayHeader, displayProductButtons, displayNav et displayFooter avec un modèle de comparaison dédié à la 1.6.
Les prix de la page de comparaison sont formatés via un wrapper adapté à la version, de sorte que la fonction continue de fonctionner sur PrestaShop 9, où l'ancien assistant d'affichage des prix a été supprimé.
La Conversions API est facultative. Le Pixel navigateur fonctionne seul : saisissez votre identifiant de Pixel, activez le suivi, et il déclenche PageView, ViewContent, AddToCart, InitiateCheckout, Purchase, Search, AddToWishlist et CompleteRegistration directement depuis le navigateur du visiteur. La Conversions API est une couche distincte, côté serveur, que vous activez seulement si vous souhaitez aussi envoyer l'événement Purchase depuis votre serveur, ce qui aide à récupérer les conversions manquées par le suivi navigateur à cause des bloqueurs de publicités ou des réglages de confidentialité. Elle nécessite son propre jeton d'accès Meta, et une fois activée, le module envoie chaque achat à la fois depuis le navigateur et depuis le serveur sous un identifiant d'événement partagé, afin que Meta les fusionne en une seule conversion dédoublonnée.
Oui. Lorsque la page de comparaison demande les données produit, le module charge chaque produit à partir de la boutique et de la langue en cours issues du contexte PrestaShop ; les noms, descriptions courtes, prix et caractéristiques s'affichent donc pour la boutique et la langue consultées par le visiteur.
Les produits désactivés, ou qui ne peuvent plus être chargés, sont ignorés automatiquement et n'apparaissent tout simplement pas dans le tableau, même si leur identifiant est encore enregistré dans le navigateur. La comparaison se fait au niveau du produit : le tableau ne crée pas de colonne distincte pour chaque déclinaison d'un produit.
Le Pixel navigateur s'exécute entièrement côté client et n'a besoin d'aucune donnée personnelle issue de votre base. Ce n'est que lorsque vous activez aussi la Conversions API que le module construit des événements Purchase côté serveur à partir de la commande : ces données de correspondance peuvent inclure les informations du client ainsi que son adresse de facturation ou de livraison, plus les cookies navigateur _fbp/_fbc propres à Facebook lorsqu'ils sont présents. Ces événements sont mis en file d'attente et envoyés depuis votre serveur vers la version de l'API Graph de Meta que vous avez configurée par une tâche en arrière-plan ; vous pouvez les valider avec un code d'événement test Meta avant qu'ils ne comptent réellement. Comme cela concerne des données client, laissez l'option de consentement activée afin que les événements ne se déclenchent qu'après qu'un visiteur a donné son consentement marketing.
Non. Database Cleanup ne supprime que l'encombrement opérationnel. Ses sept tâches ne touchent que ces tables : paniers abandonnés, statistiques de recherche, prix spécifiques expirés, logs, connexions, invités orphelins et anciens enregistrements de mails. Il n'exécute jamais de DELETE sur vos clients, commandes, factures ou adresses.
Deux règles protègent en particulier votre historique : un panier n'est supprimé que si un LEFT JOIN sur la table des commandes montre qu'il n'est jamais devenu une commande, et un enregistrement d'invité n'est supprimé que s'il n'a plus aucune connexion associée. Les paniers convertis, le véritable historique des commandes et les comptes clients restent donc intacts, l'outil efface les données sans valeur métier, pas vos enregistrements commerciaux.
Non. Les requêtes de nettoyage s'exécutent sur les tables partagées de PrestaShop (cart, log, statssearch, mail, etc.) dans toute la base de données et ne sont pas limitées au contexte de la boutique. Sur une installation multiboutique, un passage efface donc tous les anciens enregistrements correspondants pour l'ensemble des boutiques d'un coup, et pas seulement celle que vous consultez dans le Back Office.
C'est voulu pour un outil de maintenance, les données concernées (paniers expirés, anciens logs, connexions obsolètes) sont des données d'entretien, pas des données catalogue ou clients propres à une boutique. Si vous avez besoin de plus de contrôle, examinez les compteurs avant de lancer et nettoyez pendant une période creuse.
Il n'y a pas d'annulation. Chaque tâche exécute un véritable DELETE SQL, les lignes supprimées disparaissent donc définitivement, le module ne conserve ni corbeille ni point de restauration. L'action « tout exécuter » s'affiche justement avec une confirmation d'action irréversible pour cette raison.
Effectuez toujours une sauvegarde de la base de données avant votre premier nettoyage. L'écran affiche le nombre exact pour chaque tâche avant de la lancer ; la marche à suivre sûre est donc : vérifier les compteurs, sauvegarder, puis nettoyer une catégorie à la fois ou lancer le passage complet une fois que vous êtes en confiance.
Le module déclare une compatibilité avec PrestaShop 1.6 à 9.x (ps_versions_compliancy min 1.6.0.0, max 9.99.99) et est utilisé sur 1.7, 8.x et 9.x. Vos clients n'ont jamais besoin de se connecter à Facebook pour voir le flux.
Pour connecter le flux, il vous faut trois éléments côté Facebook : une application Facebook Developer avec l'API Pages, un Page Access Token longue durée (l'aide de l'admin demande les autorisations pages_read_engagement et pages_read_user_content) et votre Page ID numérique. Le nom de la page est optionnel et ne sert qu'à l'en-tête.
- Les publications sont récupérées côté serveur via l'API Facebook Graph
v21.0; votre serveur a donc besoin d'un accès HTTPS sortant. Le module utilise cURL si disponible, sinon un fluxfile_get_contents. - Le délai d'attente est de 15 secondes ; si Facebook renvoie une erreur ou aucune donnée, le bloc n'affiche rien plutôt que de casser la page.
- Tant que le Page Access Token et le Page ID ne sont pas enregistrés, un avis admin garde le flux autonome inactif.
Comme le token vous appartient en tant que propriétaire de la page et que la récupération se fait sur le serveur, les visiteurs n'ont jamais à s'authentifier auprès de Facebook.
Le flux est rendu avec le template et le CSS propres au module plutôt qu'avec un embed Facebook officiel : il s'adapte donc à votre thème au lieu d'être un widget rigide. Vous choisissez la mise en page et ajustez les espacements et le comportement depuis les réglages du module.
- Mode de mise en page :
grid,slider(carrousel) oulist. - Colonnes : 2 à 6 sur ordinateur et 1 ou 2 sur mobile.
- Nombre de publications : 1 à 25, par défaut
6. - Thème : clair ou sombre. Effet au survol : élévation (ombre), lueur, bordure mise en avant ou aucun.
- Espacements : écart de la grille (par défaut
16px) et rayon des cartes (par défaut8px). - Slider : défilement automatique optionnel à une vitesse de 2s à 10s, plus le balayage tactile sur mobile.
- Images : le chargement différé est activé par défaut pour préserver la vitesse des pages.
Vous pouvez aussi définir un titre de section, afficher ou masquer un bouton Suivre avec un texte personnalisé, et masquer tout le bloc sur mobile via l'option Afficher sur mobile.
Non. Le module n'injecte ni le SDK ni le pixel Facebook (connect.facebook.net / fbevents) dans votre boutique. Sur le hook d'affichage, il ajoute uniquement son propre CSS et JavaScript : il ne dépose donc pas de cookies tiers Facebook et ne signale pas vos visiteurs à Facebook au chargement des pages.
Les publications sont récupérées côté serveur : votre serveur appelle l'API Facebook Graph et le résultat normalisé est écrit dans un fichier de cache JSON (mprfb_feed_cache.json). Seul le contenu public de la page est stocké – texte des publications, URL d'images, permaliens et compteurs publics de réactions, commentaires et partages. Aucune donnée personnelle des clients n'est collectée ni envoyée à Facebook par le module.
- Le token d'accès est stocké dans la configuration de votre boutique et n'est utilisé que pour la récupération côté serveur ; il n'est jamais exposé au navigateur.
- Les images des publications et les liens "voir sur Facebook" pointent vers des URL Facebook / fbcdn : le navigateur d'un visiteur charge donc ces images depuis le CDN de Facebook comme n'importe quelle image distante – le module lui-même n'envoie rien qui identifie le client.
Si vous le préférez, augmentez la durée du cache (jusqu'à 24 heures) pour réduire encore la fréquence à laquelle votre serveur contacte Facebook.
Non. La date est calculée de la même manière pour tout votre catalogue à partir des réglages globaux, jours de préparation, heure limite, règle des week-ends et format de date. Elle ne tient pas compte du stock, du poids ou du fournisseur d'un produit, ni du pays ou de l'adresse du client. Le calcul s'appuie sur l'horloge de votre serveur, et non sur le fuseau horaire local du visiteur, si bien que chaque fiche produit affiche la même estimation à un instant donné. Si vous avez besoin de règles de transport propres à un produit ou à un transporteur, c'est un autre travail, voir la question sur les délais de transport ci-dessus.
Non. Le bloc de livraison est généré pendant l'affichage de la fiche produit ; rien n'est écrit en base de données, aucun cookie n'est déposé et aucune donnée personnelle (adresse IP, nom, localisation) n'est collectée. La date est calculée à la volée à partir de vos réglages et de l'horloge du serveur : il n'y a donc rien à conserver, exporter ou effacer concernant un visiteur, ce qui écarte les obligations RGPD côté visiteur.
Le module est conçu pour PrestaShop 1.6 à 9.x. L'estimation est ajoutée via le hook displayProductAdditionalInfo ; sur les thèmes qui utilisent ce hook, le bloc apparaît dans la zone d'informations complémentaires de la fiche produit, près du bouton d'ajout au panier. Les libellés (« Livraison estimée », « Commandez dans les … heures ») sont traduisibles dans les six langues de la boutique, mais les noms de jours et de mois dans la date elle-même sont produits par PHP et s'affichent en anglais quelle que soit la langue active.
Non. Le module fonctionne entièrement via deux hooks PrestaShop : filterCmsContent pour les titres des pages CMS et actionOutputHTMLBefore pour le texte des liens affiché dans les pieds de page et les menus. Les deux sont enregistrés à l'installation et aucun override de template .tpl ni aucun override de classe du cœur n'est créé, si bien qu'il reste compatible avec votre thème et survit aux mises à jour du thème. Comme actionOutputHTMLBefore réécrit le HTML final, les libellés de vos liens CMS sont remplacés partout où apparaissent les ancres cms-page-link standard de PrestaShop, sans toucher au moindre fichier de template.
Non. La seule table du module (mprcmsnames) stocke quatre colonnes : id_cms, id_lang, id_shop et le texte display_name que vous saisissez, et rien concernant les clients, les commandes ou les visiteurs. Il ne lit ni n'écrit aucune donnée personnelle, il n'a donc aucune incidence sur vos obligations RGPD ni sur votre politique de confidentialité. C'est purement un outil éditorial d'étiquetage pour vos pages CMS.
La désinstallation supprime la table propre au module mprcmsnames, de sorte que chaque nom d'affichage personnalisé que vous aviez enregistré est effacé. Vos pages CMS PrestaShop natives restent intactes : leurs noms d'origine et leurs meta titres n'ont jamais été modifiés, si bien que le front office revient simplement à afficher les titres CMS standard. Rien dans les tables ps_cms ou ps_cms_lang n'est modifié à aucun moment.
Non. C'est un module de boutons de paiement express, pas un remplacement du checkout en une page. Votre tunnel de commande PrestaShop habituel, les parcours invité et compte ainsi que la confirmation de commande restent en place, et les moyens de paiement PrestaShop standard restent disponibles au moment du paiement. Le module ajoute uniquement des raccourcis plus rapides Apple Pay, Google Pay, PayPal, Link et carte sur les pages que vous choisissez (fiche produit, panier, liste de produits ou un emplacement personnalisé), ce qui vous permet d'améliorer la vitesse de paiement sans reconstruire le tunnel de commande.
Oui, si vous activez l'enregistrement des cartes dans les réglages du module. Lorsqu'il est activé, le module ajoute un lien dans l'espace compte client et une page dédiée aux cartes enregistrées où les clients connectés peuvent consulter et supprimer leurs moyens de paiement enregistrés pour des achats futurs plus rapides. Les données de carte sont conservées par Stripe et ne sont pas stockées dans votre base PrestaShop. Si vous laissez l'enregistrement des cartes désactivé, aucune carte n'est enregistrée et le lien du compte n'apparaît pas.
Pour la relance des paniers abandonnés et le diagnostic, le module enregistre le contexte de session tel que l'identité du client ou de l'invité, la source de trafic et les détails de campagne, le type d'appareil, le navigateur et les portefeuilles qui y sont disponibles, ainsi que les données de première visite. Les numéros de carte réels sont traités par Stripe et ne sont pas stockés dans PrestaShop. Vous pouvez éventuellement activer une case de consentement à la confidentialité avec votre propre libellé dans le parcours de paiement express, renvoyant vers la page de politique de confidentialité de votre boutique, afin que les acheteurs acceptent avant de payer.
FAQ Manager déclare une compatibilité de PrestaShop 1.6.1.0 jusqu'à votre version 9.x installée, et inclut une couche ObjectModel compatible PrestaShop 1.6 afin que les mêmes modèles fonctionnent sur ces versions.
Chaque catégorie de FAQ, question, réponse, URL simplifiée, balise title et méta-description est stockée par langue dans les tables _lang du module ; la FAQ est donc entièrement multilingue - chaque langue conserve son propre texte et son propre slug.
Le multiboutique est pris en charge via la table d'association question-boutique, de sorte qu'une question peut être limitée aux boutiques de votre choix au lieu d'être imposée à toutes les boutiques du groupe.
L'onglet FAQ produit ne charge que les questions directement affectées à ce produit ; si rien n'est affecté, l'onglet n'affiche rien plutôt que d'y intégrer du contenu de catégorie sans rapport.
Pour garder les pages produit légères, le module traite les réponses selon leur portée : une question liée à un seul produit peut voir sa réponse rendue dans le HTML initial de la page, tandis qu'une question partagée entre plusieurs produits est considérée comme connexe et sa réponse est chargée en différé (lazy-load) seulement lorsqu'un client l'ouvre.
La liste respecte aussi la date de publication, les restrictions par groupe de clients et la date de révélation de la réponse ; les résultats sont triés selon le solde des votes utiles et la fraîcheur, afin que les réponses les plus utiles apparaissent en premier.
Les fonctionnalités interactives ne stockent que ce qui leur est nécessaire. Un vote utile ou non utile est enregistré dans une table de votes avec le type d'entité, l'identifiant de l'entité et l'adresse IP du visiteur, utilisée pour imposer un seul vote par IP et par question ou réponse ; un cookie PrestaShop n'est posé que pour que l'interface se souvienne de votre vote.
Lorsqu'un visiteur pose une question, l'enregistrement en attente conserve le nom, l'e-mail, le texte de la question, la langue, la boutique, le contexte produit ou catégorie et l'IP avec un statut en attente, de sorte que rien n'apparaît publiquement tant qu'un membre du personnel ne l'a pas approuvé. Les formulaires limitent le texte des questions et réponses à 5000 caractères et utilisent un champ honeypot ainsi qu'une limite de questions en attente par e-mail et par catégorie (2 par défaut) pour freiner le spam.
Sur les pages FAQ en lecture seule, le module désactive l'écriture des cookies : simplement consulter les questions ne déclenche donc aucune écriture de session.
Oui. Les demandes sont stockées par boutique et par langue, et les URL publiques sont localisées pour chaque langue de la boutique.
- Isolation par boutique : chaque demande porte un
id_shop, le slug est unique par(slug, id_shop), et la requête de la roadmap filtre surid_shop, de sorte que les idées d'une boutique n'apparaissent jamais sur le tableau d'une autre. - Contenu par langue : chaque demande enregistre sa langue, et des préfixes d'URL localisés sont définis pour les six langues, anglais
feature-requests, allemandfunktionswuensche, françaisdemandes-de-fonctionnalites, polonaispropozycje-funkcji, italienrichieste-funzionalita, espagnolsolicitudes-de-funciones, avec repli surfeature-requestspour toute autre langue. - URL conviviales : le hub, les pages par produit, les pages de demande individuelles et les listes paginées ont chacun leur propre URL localisée.
Le module enregistre l'identité et l'adresse IP de l'auteur à des fins de modération et de lutte contre les abus, puis retire ces informations des réponses publiques.
- Ce qui est stocké : pour chaque demande, l'identifiant client, ou pour les invités un nom et un e-mail validé, ainsi que l'adresse IP du visiteur via
Tools::getRemoteAddr(), avec le titre, la description, le statut, la langue et la boutique. - Pourquoi l'IP : elle sert à limiter les envois à 3 maximum par produit et par IP et par jour, et à dédoublonner les votes des invités, qui par défaut ne nécessitent pas de connexion.
- Non affiché publiquement : avant de renvoyer une liste au navigateur, le module supprime
customer_email,ip_addressetid_customerde la réponse, de sorte que les autres clients ne voient jamais qui a soumis une idée ni son e-mail ou son IP.
Comme il stocke l'e-mail et l'IP, vous devez mentionner ces données dans la politique de confidentialité de votre boutique.
Le module vise PrestaShop 1.7.6.0 et versions ultérieures, couvrant 1.7, 8.x et 9.x. Sa compatibilité déclarée est min 1.7.6.0 jusqu'à la version de PrestaShop en cours d'exécution.
C'est un module de back-office bootstrap configuré entièrement depuis le Back Office, sans code. L'onglet de la fiche produit est ajouté via un hook d'affichage, donc aucun remplacement de template ni modification du thème n'est nécessaire. Il n'apparaît que lorsque ENABLED et SHOW_ON_PRODUCT sont activés et que le produit peut être identifié. La roadmap publique et les pages de demande utilisent les routes conviviales du module plutôt que des fichiers du thème.
Uniquement le nom de l'événement. L'API Events de Hotjar fonctionne côté navigateur et n'accepte qu'un nom d'événement, pas de propriétés. Le module envoie donc des noms propres comme product_view, add_to_cart et purchase à Hotjar via hj('event', '...').
Les détails tels que le montant de la commande, la devise et les identifiants produit sont tout de même préparés par le module, mais ils sont affichés dans le moniteur d'événements de démonstration par souci de transparence, sans être transmis à Hotjar. Vous utilisez les noms d'événements pour filtrer enregistrements, heatmaps, entonnoirs et enquêtes autour des moments d'achat importants.
Chaque événement possède son propre interrupteur dans le back-office, vous n'envoyez donc que ce dont vous avez besoin. Les événements intégrés sont : vue de page, vue produit, vue catégorie, ajout au panier, ajout à la liste d'envies, début de commande, recherche, achat et création de compte.
Les règles d'événements personnalisés constituent un réglage distinct, désactivé par défaut : rien de supplémentaire ne se déclenche tant que vous n'ajoutez pas vos propres règles.
Oui. Au-delà des événements e-commerce intégrés, vous pouvez définir des règles d'événements personnalisés au format JSON dans le back-office. Une règle peut se déclencher sur un clic correspondant à un sélecteur CSS, lorsque l'URL contient un fragment, sur un contrôleur ou un module PrestaShop précis, ou sur un événement DOM que vous émettez.
Les règles s'exécutent depuis le script front-office du module : vous ne touchez donc pas aux fichiers du thème. Les événements personnalisés restent désactivés tant que vous ne les activez pas et n'ajoutez pas au moins une règle.
Chaque palier de fidélité est lié à un groupe de clients natif de PrestaShop. Lorsqu'un client atteint un palier, le module l'ajoute à ce groupe et retire le groupe du palier précédent, tout en conservant toujours le groupe de clients par défaut de votre boutique. La réduction de prix réelle est assurée par la tarification native par groupe de PrestaShop et par les règles de prix catalogue que vous associez à ce groupe, de sorte que vos remises de groupe, règles de taxe et restrictions existantes continuent de fonctionner. Le pourcentage affiché dans le compte client est la valeur annoncée du palier, à titre indicatif ; vous configurez donc la remise réelle sur le groupe de clients lié.
Les dépenses sont suivies par boutique. Chaque enregistrement de fidélité est unique par client et par boutique, et aussi bien le cumul au moment de la commande que le recalcul n'additionnent que les commandes appartenant à cette boutique. Un client qui achète dans deux boutiques de la même installation constitue donc un total de dépenses et un palier distincts dans chaque boutique. Le groupe de clients lié est ajouté sur le compte du client, et le groupe de clients par défaut de la boutique est toujours conservé.
L'installation ne reprend pas l'historique automatiquement ; les nouvelles dépenses sont comptabilisées à partir de la prochaine commande validée. Pour initialiser les clients existants, lancez le recalcul, qui additionne pour chaque client les commandes passées se trouvant dans les états de commande valides configurés (par boutique) et attribue le palier correspondant. Le même recalcul s'exécute automatiquement lorsqu'une commande passe ensuite dans un état d'annulation ou de remboursement configuré, de sorte que le total d'un client reflète toujours les dépenses réellement conservées et non un simple compteur qui ne redescend jamais.
Le module déclare ps_versions_compliancy de 1.6.0.0 jusqu'à la version de PrestaShop en cours d'exécution, et son en-tête indique PS 1.6 à 9.x. composer.json exige PHP 7.2 ou plus récent. Il n'enregistre que le hook displayHeader, il ne dépend donc pas des API de contrôleur front-office qui ont changé entre les versions majeures.
Oui. L'écran de configuration comporte un onglet Autorisations avec des interrupteurs indépendants : autoriser le changement de client, le changement d'adresse, le changement de transporteur, la gestion des remises et l'ajout de produits. Chaque interrupteur est stocké sous forme de valeur booléenne, vous pouvez donc, par exemple, conserver la modification des produits et des quantités tout en désactivant la réattribution du client. Tous les interrupteurs sont activés par défaut après l'installation.
Non. Blog Revolution détermine la visibilité à chaque chargement de page ; aucune tâche cron ni tâche planifiée n'est à configurer.
Deux conditions sont vérifiées avant qu'un article n'apparaisse sur la boutique :
- Le statut doit être Publié. Les brouillons et les articles archivés ne sont jamais montrés aux visiteurs.
- La date de publication doit être atteinte, chaque requête du front-office filtre sur
date_published <= NOW().
Pour diffuser un article à une date précise, passez-le en Publié et indiquez une date future. Il reste masqué jusqu'à ce moment, puis s'affiche automatiquement au prochain chargement d'une page du blog, sans aucune tâche d'arrière-plan. Ce même contrôle de date écarte aussi les articles datés dans le futur des listes, catégories, tags, archives, du flux RSS et du sitemap XML jusqu'à l'heure prévue.
Comme la vérification est évaluée en direct plutôt que par un planificateur, vous n'avez pas besoin d'un accès shell ou cron sur votre hébergement, ce qui est utile sur des environnements PrestaShop restreints ou mutualisés.
Sur l'écran Paiements en attente, l'action Marquer comme payé appelle markAsPaid(), qui met is_paid à 1, enregistre la date de paiement et mémorise l'identifiant de l'employé qui a confirmé. Si la commande PrestaShop liée est encore au statut En attente de paiement différé, le module la fait aussi passer à Paiement accepté (PS_OS_PAYMENT) ; une commande déjà dans un autre statut reste inchangée. Le montant n'étant plus considéré comme dû, le crédit disponible du client est également libéré pour de nouvelles commandes différées.
Non. Il enregistre uniquement des hooks du back-office, displayBackOfficeHeader, displayAdminOrder, displayAdminOrderMainBottom et actionOrderStatusPostUpdate, et ne fournit aucun contrôleur front-office. Les équipes, statuts de workflow, commentaires, rappels et notifications sont des outils internes ; les clients ne voient rien de plus sur la boutique.
Oui. Blog Revolution enregistre le contenu du blog par langue et par boutique, si bien qu'un PrestaShop multiboutique ou multilingue peut exploiter des blogs différents (ou partagés) sans que le contenu ne déborde d'une boutique à l'autre.
Fonctionnement dans le modèle de données :
- Les articles, catégories et auteurs conservent leurs champs traduisibles, titre, extrait, contenu, meta title/description et le slug
link_rewrite, dans des tables propres à chaque langue, une ligne par langue. - Chaque requête du front-office joint la traduction de l'article sur la langue courante et son association de boutique sur la boutique courante, de sorte que chaque boutique ne liste que les articles qui lui sont attribués, chacun dans la langue du visiteur.
- L'import WordPress et l'export XML/JSON travaillent eux aussi pour la boutique et la langue avec lesquelles vous les lancez.
Une précision honnête : multilingue signifie que les champs sont traduisibles, pas traduits automatiquement. Vous rédigez chaque version linguistique vous-même (ou l'importez) ; un article doit également être associé à une boutique pour y apparaître. Si le slug d'une traduction reste vide lors d'un import en masse, le module peut régénérer les valeurs link_rewrite manquantes afin que les listes ne retombent pas sur l'URL de l'index du blog.
Sur chaque page de la boutique, l'en-tête envoie un événement $pageViewed dans la file omnisend et charge le launcher-v2.js externe d'Omnisend depuis omnisnippet1.com. Lorsqu'un client est connecté, hookDisplayHeader() transmet en plus son adresse e-mail dans un appel identify ; les visiteurs non connectés n'envoient aucun e-mail. Le module n'envoie aucune donnée de panier, de commande ou de paiement. Comme l'e-mail d'un client connecté quitte votre boutique vers un tiers, vous restez responsable du consentement et de l'information sur la confidentialité appropriés.
Avant d'appliquer les changements, l'éditeur vérifie si la commande possède une facture et le personnel est averti qu'une correction peut être nécessaire. Un réglage de document de correction automatique, activé par défaut, génère un document de correction (avoir) pour la différence lorsqu'une commande facturée est modifiée. Vous pouvez le désactiver si vous préférez créer les documents de correction manuellement.
Oui. Chaque équipe stocke un id_shop et utilise par défaut le contexte de la boutique courante (Shop::getContextShopID()) ; les requêtes d'équipe sont filtrées par boutique. Lorsqu'un employé ouvre le panneau de workflow d'une commande ou publie un commentaire, le module vérifie d'abord avec hasAuthOnShop() qu'il est autorisé sur la boutique de la commande avant d'afficher ou d'enregistrer quoi que ce soit.
Oui. Chaque commande différée est enregistrée avec l'id_shop sur lequel elle a été passée, et la vérification du solde dû (getOutstandingByCustomer()) est calculée par boutique : le total impayé d'un client sur une boutique n'est donc pas décompté des commandes passées sur une autre. La liste du compte client est également filtrée sur la boutique courante. Les limites de crédit, en revanche, sont stockées par groupe de clients dans mpr_pt_credit_limit, indexé uniquement par id_group sans colonne de boutique, la même valeur limite s'applique donc à ce groupe sur chaque boutique où il existe.
Oui. Le réglage Portée de la protection propose deux modes : Toute la boutique et Pages CMS, catégories et produits sélectionnés. En mode sélectionné, la barrière n'intercepte que les pages produit, catégorie et CMS dont les identifiants correspondent à votre sélection enregistrée (stockée dans PROTECTED_ENTITIES) ; toutes les autres pages se chargent normalement. Le mode par défaut protège toute la boutique.
Lorsque l'option Décourager les moteurs de recherche est activée (par défaut), la page de mot de passe répond avec HTTP 503 Service Temporarily Unavailable, un en-tête Retry-After: 86400 et X-Robots-Tag: noindex, nofollow. Cela indique aux robots que le blocage est temporaire et leur demande de ne pas indexer la boutique protégée. Désactivez l'option si vous avez besoin que la barrière renvoie une réponse 200 normale.
Non. La seule table de base de données qu'il crée est mpr_pack_content, contenant trois entiers par ligne : id_pack, id_product et position. Il ne dépose aucun cookie, n'utilise aucun stockage local et ne lit aucune donnée client. Les scripts front-office ajoutent seulement un badge Bundle sur les fiches produits et affichent la liste des produits inclus ; il n'y a donc rien de personnel à exporter ou à effacer pour les demandes RGPD.
Oui. Le script front-office surveille le conteneur #js-product-list avec un MutationObserver et réapplique le badge Bundle chaque fois que la liste est actualisée en AJAX, par exemple lors d'une recherche à facettes ou d'un défilement infini, afin que les fiches de packs nouvellement chargées soient également décorées.
L'exporteur appelle Shop::isFeatureActive(). Lorsque le mode multiboutique est actif, la requête est limitée à la boutique du contexte courant (o.id_shop = current shop), de sorte que le fichier ne contient que les commandes de cette boutique. Lorsque le multiboutique est désactivé, aucune condition de boutique n'est ajoutée et toutes les commandes sont exportées.
Oui. Le fichier est envoyé en text/csv; charset=utf-8 avec un BOM UTF-8 (EF BB BF) écrit au début, afin qu'Excel détecte l'UTF-8 et affiche correctement les accents. Chaque valeur est entourée de guillemets doubles, de sorte qu'un séparateur ou un saut de ligne à l'intérieur d'un champ ne casse pas les colonnes.
Oui. RESPECT_CONSENT est activé par défaut : lorsque mprcookiesrevolution ou mprcookiebanner est actif, le suivi attend le consentement marketing. Il lit le cookie mprcr_consent ou mprcookie_consent et ne se déclenche qu'une fois le marketing accepté. EXCLUDE_EMPLOYEES est également activé par défaut, de sorte qu'un employé connecté naviguant sur la boutique n'est pas suivi. Les deux options peuvent être désactivées dans les réglages du module.
Sur chaque page, le script d'en-tête lit ob_click_id (accepte aussi outbrain_click_id ou dicbo) depuis l'URL d'arrivée et le stocke pendant 90 jours dans un cookie propriétaire mproutbr_ob_click_id. Lorsque le S2S est activé, un événement en file d'attente n'est envoyé à Outbrain que s'il contient un identifiant de clic valide (lettres, chiffres, points, tirets bas, deux-points et tirets, jusqu'à 500 caractères) ; les événements sans identifiant sont ignorés. L'option S2S_SEND_IP_UA détermine si les métadonnées d'IP et de user-agent sont conservées.
Oui. À l'installation, Lightweight Cookie Banner lit les feuilles de style de votre thème actif et en déduit une palette de couleurs de départ, afin que le bandeau semble faire partie de votre boutique plutôt que d'un habillage générique.
La détection lit les fichiers custom.css et theme.css de votre thème et, à défaut, le cache CCC compilé, puis récupère les couleurs à partir de :
- les variables CSS Bootstrap 5 / Hummingbird.
--bs-primarydevient le bouton Accepter,--bs-darkle fond du bandeau. - la règle
.btn-primary, qui remplace les variables lorsqu'elle est présente, pour le fond et le texte du bouton Accepter. - le fond de
.header-top, réutilisé pour le fond du bandeau.
Il vérifie aussi la luminance de chaque couleur pour que le texte reste lisible : un bandeau sombre reçoit un texte clair et un libellé Refuser plus clair, un bandeau clair reçoit un texte sombre. Si aucun CSS de thème n'est trouvé, il applique un repli raisonnable : bandeau sombre, texte blanc et bouton Accepter bleu.
Une précision honnête : cette palette est calculée une seule fois, à l'installation, comme point de départ. Elle n'est pas redétectée automatiquement si vous changez de thème par la suite. Chaque couleur, fond et texte du bandeau, couleurs des boutons Accepter et Refuser, est un réglage normal que vous pouvez remplacer manuellement à tout moment dans la configuration du module.
Lightweight Cookie Banner est conçu pour PrestaShop 1.6, 1.7, 8.x et 9.x. Sa compatibilité de version est déclarée de 1.6.0.0 jusqu'à la version de PrestaShop installée, il s'installe donc sur toute cette plage.
Le module charge son CSS et son JavaScript front-office selon la version. Sur PrestaShop 1.7 et plus récent, il enregistre la feuille de style et le script via actionFrontControllerSetMedia, le script étant chargé en bas de page ; sur PrestaShop 1.6, il revient à addCSS et addJS depuis le hook d'en-tête. Le balisage du bandeau est rendu par les hooks de pied de page et protégé pour ne s'afficher qu'une seule fois, même s'il est attaché à la fois à displayFooter et à displayFooterAfter.
C'est un bandeau côté front-office avec un écran de configuration en back-office, et il ne nécessite aucun compte ni service externe. Le choix du visiteur est conservé dans un cookie propriétaire sur votre propre domaine. Une règle à connaître à l'installation : il ne s'installe pas tant que Cookies Revolution est actif, car un seul module de consentement doit piloter la boutique.
À partir de PrestaShop 8.2, le module se greffe sur le hook actionGenerateDocumentReference (type order) et renvoie la référence formatée. Sur PrestaShop 1.7.x, où ce hook n'existe pas, il utilise une surcharge Order::generateReference() qui délègue au module. Si la numérotation est désactivée ou ne renvoie rien, PrestaShop revient à sa référence aléatoire par défaut.
Non. Le réglage du hook d'affichage est un choix unique : le widget s'affiche soit sous le produit (displayFooterProduct), soit sur la page d'accueil (displayHome), pas aux deux endroits en même temps. Choisissez l'emplacement qui correspond le mieux à votre parcours de navigation. Le script de suivi enregistre toujours les vues sur chaque page produit, quel que soit l'endroit où le bloc est affiché.
Le module déclare une compatibilité avec PrestaShop 1.6, 1.7, 8.x et 9.x. Sa compatibilité de version est définie avec un minimum de 1.6.0.0 et un maximum correspondant à votre PrestaShop en cours d'exécution, ce qui lui permet de s'installer sur les boutiques actuelles sans forçage manuel.
Le module détecte et applique des règles sur cinq types de pages front-office : les pages produit, les pages catégorie, les pages CMS, les pages fabricant et les pages fournisseur. Lorsqu'un visiteur ouvre l'une de ces pages, Product Canonical Manager identifie l'entité à partir du contrôleur et recherche une règle correspondante pour ce product, category, cms, manufacturer ou supplier.
Les pages qui ne sont pas liées à l'une de ces entités, comme la page d'accueil, les résultats de recherche, le panier ou les pages de compte. Ne sont pas ciblées par les règles, car le module n'a aucune entité à leur associer. Son rôle est de contrôler les signaux canonical, robots et hreflang sur les pages catalogue et contenu que les moteurs de recherche indexent réellement.
Non. Lorsque les deux voies sont actives, le module génère un identifiant d'événement unique pour l'achat et transmet ce même identifiant au pixel navigateur et à l'événement d'API Conversions mis en file d'attente. Quora utilise cet identifiant d'événement partagé pour reconnaître l'événement navigateur et l'événement serveur comme une seule conversion et les dédupliquer.
Oui. Les compteurs sont stockés par boutique : la table mprordernumber_counter possède une clé unique sur (id_shop, scope_type, scope_id), et le générateur lit l'ID de la boutique du contexte courant. Chaque boutique incrémente son propre compteur, donc les commandes d'une boutique ne consomment pas les numéros d'une autre.
La liste conserve jusqu'au nombre défini dans Nombre maximal de produits (8 par défaut), et le cookie du navigateur qui stocke les identifiants est renouvelé pour une durée de 30 jours à chaque consultation d'un produit. Le produit en cours de consultation est retiré de la liste, et la recherche côté serveur limite en plus la requête à 20 identifiants avant de les charger. Seuls les produits valides et actifs sont renvoyés, de sorte que les articles supprimés ou désactivés disparaissent automatiquement du bloc.
Non. Product Canonical Manager ne modifie jamais vos fiches produit, catégorie ou CMS, et il ne touche pas aux fichiers du thème. Il fonctionne entièrement au moment de la sortie, via le hook actionOutputHTMLBefore, en réécrivant le <head> HTML final juste avant l'envoi de la page au navigateur, il remplace ou insère la balise canonical, ajoute les directives robots et reconstruit les liens hreflang selon vos règles.
Comme rien n'est écrit dans votre catalogue ni dans vos templates, le changement est entièrement réversible : désactivez une règle et la page revient à la sortie par défaut de PrestaShop ; désinstallez le module et sa table de règles est supprimée. Le module ne stocke que vos règles SEO, aucune donnée client ou personnelle, il n'alourdit donc pas votre conformité RGPD.
Oui. En plus des événements standard, vous pouvez définir des règles d'événements navigateur personnalisées qui se déclenchent lors de clics sur des éléments, sur des URL spécifiques, sur des contrôleurs ou pages correspondants, ou lors d'actions du DOM. Le nom d'événement, le sélecteur, l'URL et les clés de paramètres de chaque règle sont validés et nettoyés avant l'enregistrement, de sorte que seules des règles bien formées sont stockées.
Oui, JavaScript doit être activé : le cookie est lu et écrit, et les fiches produits sont récupérées via AJAX, entièrement dans le navigateur du visiteur. Comme la liste personnalisée est chargée côté client après le rendu de la page, le bloc reste correct pour chaque visiteur même lorsque la page environnante est servie depuis un cache de page complète ou un cache CDN, rien de spécifique au visiteur n'est intégré dans le HTML mis en cache. Si JavaScript est désactivé, le bloc reste simplement masqué.
Oui. Chaque règle possède une portée boutique : elle peut s'appliquer à une boutique précise ou à toutes les boutiques lorsque son id_shop vaut 0. Sur une installation multiboutique, le résolveur ne charge que les règles dont la boutique correspond à la boutique courante ou à la valeur toutes-boutiques, de sorte que chaque boutique peut avoir sa propre politique de canonical et d'indexation tout en partageant des règles globales.
Lorsque plusieurs règles correspondent à la même page, le module les ordonne par priority (la plus élevée d'abord) et la première règle dotée d'une action canonical détermine l'URL canonical de la page. Les indicateurs noindex et nofollow sont cumulatifs, si une règle correspondante les définit, ils sont appliqués, si bien qu'une règle large de type noindex de groupe et une règle canonical spécifique fonctionnent ensemble sans conflit.
Oui. Une règle de sous-titre peut contenir des jetons de substitution que le module remplit page par page à partir des données de votre catalogue, de sorte qu'un même libellé reste pertinent sur toute une catégorie ou une marque. Lorsqu'un sous-titre contient des placeholders, le resolver les traite via le moteur de substitution en utilisant l'entité, la langue et la boutique en cours avant l'affichage.
Les jetons pris en charge sont {name} (nom du produit, de la catégorie, de la page CMS, du fabricant ou du fournisseur), {reference} et {ean13} pour les produits, {price} (le prix produit formaté), {manufacturer} et {category} (nom de la catégorie par défaut), ainsi que {feature:X} pour la valeur d'une caractéristique et {attribute:X} pour la valeur d'une déclinaison.
Comme les placeholders sont résolus au moment de l'affichage dans la langue courante, une seule règle groupée par catégorie, marque ou fournisseur garde chaque page exacte sans modifier les produits un par un. Un texte de sous-titre sans placeholder est affiché tel quel.
Oui. Chaque vue est enregistrée avec la boutique où elle a eu lieu, et chaque calcul, vues, ventes, visiteurs en direct et liste des achats récents, est filtré par la boutique en cours. Les ventes proviennent uniquement des commandes valides de cette boutique. Ainsi, chaque boutique d'un multiboutique PrestaShop affiche ses propres chiffres et rien n'est mélangé entre les boutiques.
Le sous-titre est affiché par le hook displayMprSubtitle, qui doit se placer juste après le titre dans votre thème. Le gestionnaire de placement analyse les fichiers .tpl du thème actif pour repérer le h1 (ou le h2/h3 des vignettes de liste) pour chaque type de page, puis insère l'appel du hook après.
Le placement n'écrase pas votre thème parent. Lorsque le titre se trouve dans un thème parent, le module crée une surcharge minimale de thème enfant avec {extends} et une surcharge {block}, en copiant uniquement le bloc contenant le titre plutôt que tout le fichier.
Si vous préférez tout contrôler, vous pouvez ignorer le scanner et ajouter {hook h='displayMprSubtitle'} à la main où vous voulez dans vos templates ; les thèmes qui utilisent déjà displayProductSubtitle peuvent appeler cet alias. Comme la sortie passe toujours par un hook standard, les sous-titres s'affichent sans coder en dur le balisage du module dans les fichiers du cœur.
Non. Avant d'enregistrer une vue, le module vérifie si le visiteur semble humain. Lorsque les données de session partagées sont disponibles, il ignore tout ce qui est signalé comme robot, centre de données ou trafic interne ; sinon, il se rabat sur une vérification du user-agent par rapport à une longue liste de crawlers et d'outils d'automatisation connus (Googlebot, Bingbot, AhrefsBot, SemrushBot, GPTBot, navigateurs headless, curl/wget, etc.). Les visites de robots ne sont pas enregistrées, et les visites répétées d'un même client sont ignorées pendant 30 minutes, si bien qu'une personne rechargeant la page ne peut pas gonfler le compteur.
Le traqueur de vues n'enregistre que quatre éléments par visite : l'identifiant du produit, l'identifiant de la boutique, l'identifiant invité anonyme de PrestaShop et un horodatage, aucun nom, e-mail ni adresse IP. Le popup des achats récents lit les commandes et les clients existants directement dans votre propre base de données plutôt que de les copier dans une nouvelle table, et les noms des acheteurs peuvent être réduits à une initiale. Les anciennes lignes de vues sont purgées automatiquement à environ deux fois la période configurée, et la désinstallation du module supprime entièrement sa table.
Oui. Advanced SEO Sitemap Builder est conçu pour une génération planifiée : vous dirigez le cron de votre serveur (ou un service cron externe) vers une URL de cron dédiée. Le module ne reconstruit pas silencieusement tous les fichiers à chaque chargement de page, l'exécution planifiée écarte ce travail des requêtes de vos visiteurs.
Le point d'accès cron est protégé par un jeton d'accès privé, créé automatiquement lors de l'installation et régénérable à tout moment depuis le Back Office. Une requête sans le bon jeton est rejetée avec un 403, de sorte que l'URL de génération n'est pas laissée ouverte au public.
Deux protections évitent les exécutions qui se chevauchent ou trop fréquentes : si une génération est déjà en cours, un second appel est ignoré (une exécution bloquée est libérée automatiquement au bout d'environ 30 minutes), et un intervalle minimum, une heure par défaut, empêche de reconstruire la sitemap trop souvent. Vous pouvez appeler le cron aussi souvent que vous le souhaitez ; il indique simplement que la génération a eu lieu récemment jusqu'à ce que l'intervalle soit écoulé.
Oui. Advanced SEO Sitemap Builder fonctionne par boutique. Chaque boutique dispose de son propre fichier d'index de sitemap et de ses propres fichiers enfants, et la génération s'exécute dans le contexte de boutique de la requête : les URL sont donc découvertes et écrites pour cette boutique précise, sans mélange.
La protection qui empêche deux générations de se chevaucher est suivie par boutique, si bien qu'une exécution longue sur une boutique ne perturbe pas les fichiers d'une autre. Le lien de sitemap que le module ajoute à l'en-tête de la page pointe lui aussi vers l'index de sitemap de la boutique que le visiteur consulte.
Oui. Dans les réglages du module, vous pouvez limiter le widget à toutes les pages, aux pages produit uniquement, aux pages catégorie uniquement ou aux pages de commande (panier et commande) uniquement, et un interrupteur distinct « Afficher sur mobile » empêche son chargement sur les appareils mobiles. La règle de page est vérifiée côté serveur avant l'insertion du loader Smartsupp, donc sur les pages exclues aucun script de chat n'est ajouté.
Non. Le rôle de ce module est de charger le widget Smartsupp sur votre boutique à partir de votre Website Key. Les fonctionnalités comme les chatbots, les enregistrements vidéo de session et la messagerie multicanal se configurent dans votre compte Smartsupp et dépendent de votre offre Smartsupp, pas de PrestaShop. Une fois le widget connecté, tout ce que vous activez dans Smartsupp est diffusé par son intermédiaire.
Non. Le nom et l'e-mail du client ne sont transmis à Smartsupp que lorsque l'option « Transmettre les données client » est activée et que le client est connecté. Pour les invités ou les visiteurs non connectés, rien n'est prérempli : le chat fonctionne quand même, il démarre simplement sans ce contexte. Vous pouvez aussi désactiver complètement « Transmettre les données client » si vous préférez n'envoyer aucune donnée personnelle.
mpr_tax_display est enregistré ; la requête de bascule évite volontairement d'écrire le cookie de session privé de PrestaShop et est marquée no-store et noindex. Comme les règles de clé de cache et de cookies varient, testez le comportement sur votre propre configuration CDN / cache de page complet.Rien n'est perdu, car le module ne stocke jamais le texte alternatif dans votre base de données. Automatic SEO Images Alt Tags définit la valeur du champ legend (alt) de l'image en mémoire, pendant que chaque page produit, page de liste ou page catégorie est préparée, il n'écrit pas dans vos enregistrements d'images. Le texte alternatif généré n'existe que tant que le module est actif.
Si vous désactivez le module avec l'interrupteur enabled ou si vous le désinstallez complètement, les hooks de présentation ne s'exécutent plus et les pages reviennent au texte alternatif enregistré dans PrestaShop. Les légendes saisies à la main restent intactes ; seul le texte généré par les modèles cesse d'apparaître. Par défaut (avec override_existing désactivé), le module ne remplit que les légendes vides et n'a donc jamais remplacé votre texte manuel.
La désinstallation supprime uniquement les réglages et le menu d'administration propres au module, et rien d'autre. Elle n'analyse, ne réécrit ni ne supprime aucune donnée d'image, de produit ou de catégorie : le module peut donc être essayé puis retiré en toute sécurité.
Le module vise PrestaShop 1.7, 8.x et 9.x (compatibilité déclarée jusqu'à 9.99.99). Il enregistre trois hooks de présentation : actionPresentProduct pour les pages produit, actionPresentProductListing pour les listes de catégorie, de recherche et de page d'accueil, et actionPresentCategory pour les images de couverture de catégorie.
Le texte alternatif des images de produit et de liste fonctionne sur toute la plage prise en charge. En revanche, la légende de l'image de catégorie repose sur le hook actionPresentCategory, qui n'existe qu'à partir de PrestaShop 9.1. Sur les versions antérieures, les modèles produit et liste s'appliquent normalement ; seul le modèle distinct de l'image de catégorie nécessite la 9.1 ou une version ultérieure.
Comme tout se fait au niveau du présentateur, sans analyser le thème ni réécrire le HTML, le module ne dépend pas d'un thème particulier et reste compatible tant que votre thème utilise les présentateurs produit et catégorie standard de PrestaShop.
Non. Le module est volontairement léger et compatible avec le cache. Il n'exécute aucune requête en base de données lors de la construction du texte alternatif, n'analyse ni ne réécrit le HTML rendu et ne touche jamais aux fichiers image. Le texte alternatif est produit par un simple remplacement de chaînes sur des données que PrestaShop a déjà chargées pour la page.
Ses réglages sont lus une seule fois et conservés dans un cache en mémoire pour la requête, et le générateur de texte n'est créé qu'à sa première utilisation. Chaque légende est produite en remplaçant des variables de modèle comme {product_name} ou {category}, en nettoyant les espaces et séparateurs, puis en tronquant à la longueur maximale (125 caractères par défaut).
Comme il travaille sur les données produit et catégorie présentées, le résultat est capturé par le cache de page complet que vous utilisez : les pages en cache conservent le texte alternatif généré sans travail supplémentaire à chaque visite. Il n'y a ni tâche cron, ni traitement en arrière-plan, ni traitement en masse à planifier.
Oui. Dans le Back Office, le bouton peut cibler toutes les pages, uniquement les pages produit, uniquement les pages catégorie, ou uniquement les pages de commande (panier, commande et commande en une page). Un interrupteur distinct contrôle son affichage sur mobile.
Vous pouvez aussi définir un délai d'affichage en secondes pour que le bouton apparaisse après le premier chargement, ainsi qu'une marge afin qu'il ne recouvre pas les boutons produit ou les éléments de commande. Le bouton n'est affiché que si le widget est activé et qu'un numéro de téléphone valide est enregistré.
Warehouse Revolution est compatible de PrestaShop 1.6.1.0 jusqu'à la série 9.x actuelle, et une couche de compatibilité intégrée permet à ses classes de données de fonctionner aussi bien sur l'ancienne branche 1.6 que sur 1.7, 8 et 9. Il nécessite PHP 7.1 ou une version plus récente. Tous les écrans de gestion utilisent l'interface native du back-office, aucun logiciel serveur supplémentaire n'est donc requis.
ORDER BY RAND() sur les produits dont active = 1) et exclut tout produit déjà promu pendant la fenêtre de protection anti-répétition que vous définissez (12 semaines par défaut). Il n'y a aucun filtre de catégorie, de prix ou de stock, donc chaque produit actif de la boutique est un candidat possible. Pour voir quel produit, quel code et quels prix seraient générés avant toute création, utilisez le bouton Dry Run du Back-Office : il renvoie la sélection sans créer de règle panier ni publier sur les réseaux sociaux. Relancer Dry Run ou Run Now retire la sélection au hasard.Les deux fonctionnent. Vous pouvez saisir un nom d'utilisateur Telegram personnel ou un nom d'utilisateur de bot, avec ou sans le préfixe @ ; il doit comporter de 5 à 64 caractères composés de lettres, de chiffres et de tirets bas. Le module crée un lien https://t.me/… vers ce compte, et c'est tout ce qu'il fait du côté de Telegram.
Le module n'envoie pas de réponses automatiques, de messages de bienvenue ni de menus de bot par lui-même. Si vous souhaitez des réponses automatisées, créez un bot avec @BotFather dans Telegram et faites pointer le module vers ce bot ; l'automatisation se trouve alors dans Telegram, pas dans ce module.
Le message pré-rempli est facultatif. Lorsque vous en définissez un, le module l'ajoute au lien Telegram sous forme de texte encodé pour l'URL, de sorte que le client le voit déjà saisi dans Telegram et peut le modifier avant de l'envoyer. C'est une phrase de départ, et non un message envoyé automatiquement au nom du client.
Vous pouvez inclure l'espace réservé {url} dans ce texte. Le module le remplace par l'adresse de la page sur laquelle se trouve le client avant d'ouvrir la discussion, ce qui donne à votre équipe le contexte de ce que le client regardait. Laissez le champ vide si vous préférez que les clients écrivent eux-mêmes le premier message.
Non. Le module n'intègre ni le SDK WhatsApp Business ni aucun JavaScript tiers. Sur la boutique, il enregistre uniquement son propre petit fichier CSS et affiche un simple lien vers https://wa.me/<numero>. Le seul script en ligne est une minuterie optionnelle ajoutée lorsque vous configurez un délai d'affichage.
Le module lui-même ne dépose aucun cookie. Lorsqu'un visiteur clique sur le bouton, WhatsApp (ou WhatsApp Web sur ordinateur) s'ouvre dans un nouvel onglet et la conversation se déroule là, sur le service de WhatsApp.
Warehouse Revolution ne supprime pas le stock natif. Il tient son propre registre, entrepôts, emplacements et mouvements de stock, comme source de vérité, puis réinscrit la quantité obtenue dans le stock_available de PrestaShop afin que la boutique, le catalogue et les autres modules affichent toujours la disponibilité correcte. Pour les produits assemblés à partir de composants avec une nomenclature (BOM), la quantité vendable est déduite du goulot d'étranglement de la recette et actualisée automatiquement (une tâche cron s'exécutant environ toutes les 15 minutes), de sorte que le front-office reste exact sans intervention manuelle.
Le module conserve ses paramètres dans sa propre table de configuration au lieu de les mélanger à la configuration standard de PrestaShop. Ces paramètres sont globaux : le même nom d'utilisateur Telegram, la même apparence et le même comportement d'affichage s'appliquent à toutes les boutiques d'une installation multiboutique.
Cette version ne propose pas de destination Telegram distincte par boutique ; par conséquent, si vous avez besoin de comptes Telegram différents pour des boutiques différentes, cela n'est pas pris en charge actuellement. La désinstallation du module supprime ses paramètres enregistrés.
cron.php du module avec le jeton de sécurité affiché dans le Back-Office, par exemple * * * * * php .../modules/mprweeklysale/cron.php --token=YOUR_TOKEN (une URL HTTP avec le même jeton fonctionne aussi). PrestaShop n'exécute pas de tâches en arrière-plan tout seul, donc sans ce cron la vente ne se déclenchera pas au jour et à l'heure prévus. Vous pouvez lancer une vente à tout moment avec le bouton Run Now de la page de configuration, qui affiche aussi le planning, la prochaine et la dernière exécution ainsi que la commande cron exacte à copier.Oui. Warehouse Revolution ajoute une page de retours côté client qui exige que l'acheteur soit connecté, de sorte que chaque demande de retour est liée à son propre compte et à ses commandes. Dans le back-office, vous traitez chaque RMA selon un flux défini, demandé, approuvé, retour attendu, reçu, inspecté, puis résolu ou rejeté, et vous notez les articles retournés de la classe A (comme neuf, avoir de stock complet) à la classe F (invendable, mise au rebut), ce qui détermine si un article revient dans le stock vendable. Les clients disposent également d'une page d'expédition pour suivre leur commande.
Non. Pour fonctionner avec différents thèmes, le module s'enregistre à la fois sur le hook du pied de page et sur celui d'avant la fermeture du corps de page, mais une protection interne garantit que le widget n'est affiché qu'une seule fois par page, même si le thème appelle plusieurs de ces hooks.
Vous obtenez donc toujours un seul bouton WhatsApp, quel que soit le nombre d'emplacements compatibles proposés par votre thème. Si un bouton semble mal placé, ajustez la position, la marge et les réglages de page dans le Back Office plutôt que de modifier le thème.
Oui. Warehouse Revolution est conçu pour la gestion multi-entrepôts : vous pouvez définir plusieurs entrepôts et conserver une quantité de stock distincte par produit dans chacun, de sorte que le module sait toujours combien vous détenez et où. Dans chaque entrepôt, vous pouvez organiser le stockage physique en rayonnages et en cellules ou bacs individuels, et attacher une note d'emplacement au stock d'un produit, afin que les préparateurs soient envoyés directement à la bonne étagère au lieu de chercher dans l'entrepôt. Les mouvements de stock, les transferts entre entrepôts, les commandes d'achat et les retours sont tous enregistrés sur l'entrepôt concerné, ce qui vous donne une vue précise et localisée de l'inventaire sur l'ensemble de l'activité.
Non. L'élément titre rendu côté serveur n'est jamais modifié : le préfixe compteur et les messages de rappel sont appliqués par JavaScript après le chargement, uniquement dans le navigateur d'un vrai visiteur, et le titre d'origine exact est restauré au focus. Les robots connus sont totalement exclus et les liens d'icônes clair/sombre sont du balisage statique. Ce que les moteurs indexent est identique, module activé ou non.
Avec une seule icône, le thème correspondant l'utilise et l'autre conserve élégamment le favicon natif de la boutique. Sans icône, le module ne touche pas du tout à votre balisage favicon. Le badge peut toujours se dessiner sur l'icône native, et les fonctions de titre d'onglet continuent de fonctionner indépendamment.
Sur PrestaShop 1.7, 8 et 9, le module écoute les événements panier du cœur (updateCart / updatedCart) : chaque ajout, retrait ou changement de quantité AJAX redessine immédiatement le badge et le titre. Sur PrestaShop 1.6, il surveille le compteur du bloc panier. La bulle se plafonne à votre limite (« 9+ ») et disparaît complètement quand le panier se vide.
Oui. Le badge est un hub. N'importe quel script enregistre un compteur en une ligne de JavaScript (window.mprFavicon.registerSource), et un module peut exposer sa source via le hook actionRegisterFaviconBadge pour obtenir son propre interrupteur dans le back-office : liste d'envies, réponses de support non lues, alertes de stock. Vous choisissez entre la somme de toutes les sources ou une source prioritaire.
Icônes : ICO, PNG, SVG et WebP (les SVG sont reconstruits par un assainisseur strict avant stockage). Plateformes : PrestaShop 1.6.0.4 à 9.x sur PHP 7.1 ou plus récent. Le moteur front est en JavaScript pur sans dépendance, pas de jQuery, rien qui bloque le rendu, et il fonctionne avec n'importe quel thème.
Il est volontairement poli : le rappel ne tourne que lorsque l'onglet est en arrière-plan ET que le panier n'est pas vide, fait défiler vos propres messages (par langue, à votre rythme), et dès que le visiteur revient, le titre d'origine exact est restauré au caractère près. Vous pouvez désactiver le rappel, le préfixe compteur ou tout le module d'un seul interrupteur.
Oui, depuis la version 1.1. À partir d'un seul PNG ou WebP, le module génère des icônes de lien 16/32/48 px (les icônes de résultats de Google exigent un multiple de 48 px), une icône Apple touch 180 px, des icônes web-app 192/512 px, un manifeste web et une favicon.ico multi-tailles. Un interrupteur optionnel écrit cette favicon.ico à la racine de la boutique, le fichier exact que lisent Bing, DuckDuckGo et Yahoo, l'original étant sauvegardé une fois et restauré automatiquement à la désactivation ou à la désinstallation.
Oui. Depuis la 1.1, téléversez une icône dédiée au back-office (ou laissez le module réutiliser votre icône claire) et chaque onglet admin l'affiche à la place du logo PrestaShop par défaut. Si vous gérez plusieurs boutiques, chaque back-office obtient enfin un onglet reconnaissable, un interrupteur désactive la fonction.
Non. Le module change uniquement l'adresse enregistrée à laquelle la commande fait référence. Prix, frais de port, taxes, totaux et documents déjà générés restent strictement identiques. Le recalcul est volontairement exclu, pour qu'une correction d'adresse ne puisse jamais modifier ce que doit le client.
Chaque document verrouille sa propre adresse. L'adresse de facturation se verrouille dès qu'une facture existe. L'adresse de livraison se verrouille dès que la commande possède un numéro de suivi, un bon ou une date de livraison, est déjà passée par un statut expédié ou livré, ou possède une expédition d'entrepôt active lorsque MPR Warehouse Revolution est installé. Une règle de transporteur optionnelle peut aussi verrouiller l'adresse de livraison pour des transporteurs sélectionnés, typique des commandes en point relais et click-and-collect, où l'adresse de livraison est le lieu de retrait. Le client voit une courte explication à la place de l'option de changement, et les mêmes règles sont réappliquées côté serveur au moment de l'enregistrement.
La commande doit appartenir au client connecté, se trouver dans l'un des statuts que vous autorisez dans les réglages du module et ne pas dépasser l'âge maximal configuré en heures. Sont exclues : les commandes invitées, les commandes purement virtuelles, les commandes avec plusieurs transporteurs ou expéditions, et les commandes avec livraison fractionnée ou multi-adresses. Toutes les conditions sont revérifiées dans une transaction verrouillée juste avant l'écriture.
Le client choisit parmi les adresses enregistrées dans son propre carnet. La fenêtre contient un lien « Ajouter une nouvelle adresse » vers le formulaire d'adresse standard de PrestaShop ; après l'avoir créée, il revient sur la page de la commande et la sélectionne. Le serveur vérifie avant l'enregistrement que l'adresse choisie appartient bien à ce client.
Oui. Chaque changement confirmé écrit une entrée d'audit en ajout seul avec la commande, l'auteur du changement, l'ancienne et la nouvelle adresse accompagnées de copies complètes, l'adresse IP et l'horodatage. Les entrées se chargent par numéro de commande sur la page de configuration du module. La table d'audit survit volontairement à la désinstallation.
Oui. Une fois le changement enregistré, le module déclenche le hook actionOrderAddressChanged avec les identifiants de la commande, du panier et du client, les identifiants d'adresse avant/après et les instantanés complets des deux adresses, pour que vos modules d'entrepôt, d'ERP ou d'édition de commande se synchronisent. Le marchand reçoit aussi une notification, et le client peut recevoir en option une confirmation, chacune dans la langue du destinataire lorsqu'une traduction d'e-mail correspondante est disponible, avec l'anglais en repli.
Non. Si une variable est absente, son espace réservé est retiré avant l'envoi de la page. Si un calcul échoue, la boutique réutilise la dernière valeur enregistrée lorsqu'elle en a une et retire l'espace réservé sinon. Le visiteur lit la phrase sans le nombre, jamais une page laissant transparaître du code. Cette règle s'applique à toutes les sorties et elle est couverte par les tests du module.
Non. Vous écrivez le jeton de la variable directement dans le contenu que vous modifiez déjà, une description produit, un texte de catégorie ou une page, et il se résout à l'affichage. Content Variables propose aussi une balise Smarty pour les templates et un appel PHP pour les modules, mais l'usage quotidien n'en a pas besoin.
Oui, et c'est le cas courant. Vous décrivez le groupe en assemblant des conditions : une catégorie, une marque, un fournisseur, une étiquette, une caractéristique, une déclinaison comme une couleur, ou une plage de prix. Les conditions d'un même groupe doivent toutes correspondre, et un second groupe propose une alternative.
Oui. Chaque variable enregistre les mots qui suivent le nombre pour chaque langue installée, et la forme est choisie d'après la valeur, si bien que 1, 2 et 155 peuvent prendre des terminaisons différentes. Les langues qui n'ont besoin que d'un singulier et d'un pluriel fonctionnent de la même façon.
Les pages ordinaires ne répètent pas la requête catalogue. Une valeur calculée est établie une fois puis conservée pendant une durée que vous réglez dans le module, si bien que les pages ordinaires lisent la valeur enregistrée. Chaque boutique conserve ses propres valeurs. Parcourir la sortie et lire les valeurs a tout de même un petit coût.
Oui. Une variable possède sa propre valeur pour chaque langue, si bien que la même information se lit correctement partout et se modifie à un seul endroit. Les valeurs calculées sont enregistrées par boutique, donc chaque boutique compte son propre catalogue.
Oui. Ajoutez un point d'exclamation après les crochets ouvrants : [[!mpr:product_count]] affiche [[mpr:product_count]]. Le point d'exclamation est l'échappement et n'est pas affiché, ce qui permet à une page d'aide d'expliquer la syntaxe sans que l'exemple se transforme en nombre.
Autres catégories
Vous avez encore des questions ?
Vous ne trouvez pas ce que vous cherchez ? Envoyez-nous votre question et nous vous répondrons.