dfsavecart — Sauvegarde de panier par lien magique
Installation, configuration et utilisation du module de sauvegarde de panier par lien magique pour PrestaShop 8 et 9.
Présentation
dfsavecart ajoute une fonctionnalité « Garder pour plus tard » sur la page panier de votre boutique PrestaShop 8 ou 9. Le visiteur, connecté ou invité, saisit son adresse email et reçoit un lien sécurisé (« lien magique ») qui restaure son panier exact — mêmes produits, mêmes quantités — sur n’importe quel appareil, à tout moment pendant la durée de validité configurée.
Le module est non intrusif : il n’affecte ni le tunnel de commande, ni le checkout, ni les autres modules. Il fonctionne avec le système d’email natif de PrestaShop (et donc avec votre SMTP existant).
Prérequis
- PrestaShop 8.0.x à 9.x
- PHP 8.1 ou supérieur
- MySQL 5.7+ ou MariaDB 10.3+
- Un envoi d’email fonctionnel (Paramètres avancés > E-mail — testez l’envoi avant d’installer le module)
Installation
- Téléchargez le fichier
dfsavecart.zipdepuis votre compte DataFirefly. - Dans le back office PrestaShop, allez dans Modules > Gestionnaire de modules.
- Cliquez sur Téléverser un module et sélectionnez le ZIP.
- PrestaShop installe le module automatiquement : la table
ps_df_savecartest créée et les hooks sont enregistrés. - Cliquez sur Configurer pour accéder aux réglages.
Aucun override de classe ni de contrôleur n’est installé : la désinstallation est propre et sans résidu (la table et les configurations sont supprimées).
Configuration
Tous les réglages se trouvent sur une seule page : Modules > Gestionnaire de modules > dfsavecart > Configurer.
Réglages principaux
- Activer le module — interrupteur général. Désactivé, le bloc disparaît du front sans désinstaller.
- Position du bouton — Pied du panier (recommandé, hook
displayShoppingCartFooter), Dans le panier (hookdisplayShoppingCart) ou Les deux. Le choix dépend de votre thème : testez le rendu sur la page panier après modification. - Durée de validité du lien — de 1 à 365 jours, 30 par défaut. Au-delà, le lien expire et l’entrée est purgée.
Sécurité et anti-spam
- Limite par email / jour — nombre maximal d’envois pour une même adresse sur 24 h glissantes (10 par défaut). Mettre 0 pour désactiver. Le compteur repose sur un hash salé de l’email : l’adresse n’est pas stockée en clair pour cette fonction.
- Lien à usage unique — si activé, le lien devient invalide après la première restauration. Utile pour des paniers à caractère confidentiel (B2B, devis).
Comportement de restauration
- Vider le panier actuel avant restauration — activé par défaut. Si désactivé, les produits du lien s’ajoutent au panier en cours (cumul).
RGPD et email
- Demander un consentement RGPD — affiche une case à cocher obligatoire avant l’envoi (activé par défaut, recommandé).
- Envoyer en copie cachée au marchand — ajoute l’email de contact de la boutique en BCC sur chaque envoi, pour suivi interne.
- Sujet email (par langue) — personnalisable pour chaque langue active de la boutique. Variables disponibles :
{shop_name}et{firstname}.
Fonctionnement côté client
- Le client ajoute des produits à son panier et ouvre la page panier.
- Il voit le bloc « Garder ce panier pour plus tard » avec un champ email (pré-rempli s’il est connecté).
- Il saisit son email, coche le consentement si demandé, et clique sur Envoyer le lien.
- Il reçoit un email contenant un résumé du panier (produits, quantités, total estimé), la date d’expiration et un bouton Restaurer mon panier.
- Un clic sur le bouton restaure le panier exact et redirige vers la page panier, avec un message de confirmation.
Cas particuliers à la restauration
- Produit désactivé ou supprimé — la ligne est ignorée et le client est informé par un message listant les produits indisponibles.
- Stock insuffisant — la quantité est ajustée au maximum disponible, avec un message signalant l’ajustement.
- Lien expiré ou déjà utilisé (mode usage unique) — une page d’erreur sobre s’affiche, avec des liens vers le panier actuel et l’accueil.
- Langue et devise — celles du panier d’origine sont restaurées.
Emails
Les templates HTML et texte sont fournis en français, anglais, espagnol et allemand dans modules/dfsavecart/mails/{iso}/savecart.html et savecart.txt. La langue utilisée est celle du panier au moment de la sauvegarde.
Variables disponibles dans les templates : {firstname}, {shop_name}, {restore_link}, {cart_items_html}, {cart_items_txt}, {cart_total}, {expiry_date}.
Pour personnaliser durablement les templates, dupliquez-les dans le dossier mails de votre thème plutôt que de modifier ceux du module : ils seraient écrasés à la mise à jour.
Sécurité
- Token 256 bits — généré par
random_bytes(32), le générateur cryptographiquement sûr de PHP. 64 caractères hexadécimaux dans l’URL. - Stockage en hash — seule l’empreinte SHA-256 du token est stockée en base. En cas de compromission de la base de données, aucun lien ne peut être reconstruit.
- CSRF — l’endpoint AJAX de sauvegarde vérifie le jeton de session PrestaShop.
- Validation stricte — le format du token est vérifié côté serveur (
[a-f0-9]{64}) avant toute requête en base.
RGPD
- Consentement explicite configurable avant l’envoi de l’email.
- Pour la limitation anti-spam, l’email n’est pas conservé en clair : seul un hash salé (avec la clé secrète de la boutique) est utilisé.
- Les enregistrements expirés sont supprimés automatiquement (purge) — voir section suivante.
- Aucune donnée n’est transmise à un service tiers : tout reste dans votre base PrestaShop.
- En cas de demande d’effacement d’un client, supprimez ses lignes dans la table
ps_df_savecart(colonneemail).
Purge des liens expirés
Trois options, de la plus simple à la plus automatisée :
- Bouton manuel — sur la page de configuration du module, « Purger les entrées expirées ».
- Module CronJobs — installez le module gratuit CronJobs de PrestaShop : le hook
actionCronJobdu module est appelé automatiquement et déclenche la purge. - Crontab système — planifiez un appel régulier au cron de votre boutique selon votre configuration serveur.
Statistiques
La page de configuration affiche quatre compteurs en temps réel : total enregistrés, actifs (non expirés), expirés (en attente de purge) et restaurés (liens utilisés au moins une fois). Le ratio restaurés / total vous donne le taux de conversion de la fonctionnalité.
Multiboutique
Le module est compatible multiboutique : chaque sauvegarde mémorise l’identifiant de la boutique d’origine, utilisé lors de la restauration. La configuration se fait par contexte de boutique standard PrestaShop.
Dépannage
L’email n’arrive pas
- Vérifiez l’envoi d’email global de la boutique : Paramètres avancés > E-mail > Tester l’envoi.
- Vérifiez le dossier spam du destinataire.
- Consultez les logs : Paramètres avancés > Logs (les erreurs du module sont préfixées
[dfsavecart]).
Le bloc n’apparaît pas sur la page panier
- Vérifiez que le module est activé dans sa configuration.
- Vérifiez que le panier contient au moins un produit (le bloc est masqué sur panier vide).
- Vérifiez la position choisie : certains thèmes n’implémentent pas le hook
displayShoppingCartFooter— passez alors sur « Dans le panier » ou « Les deux ». - Videz le cache : Paramètres avancés > Performances > Vider le cache.
Message « Jeton de sécurité invalide »
- La page panier est restée ouverte trop longtemps et la session a expiré : rafraîchissez la page et réessayez.
Message « Trop de demandes pour cette adresse »
- La limite anti-spam quotidienne est atteinte pour cet email. Augmentez la limite dans la configuration ou attendez 24 h.
Désinstallation
La désinstallation supprime la table ps_df_savecart (tous les paniers sauvegardés sont perdus) et l’ensemble des clés de configuration. Aucun résidu n’est laissé en base ni dans les fichiers.