Tout ce que vous voudriez savoir avant d'installer.
Un regard détaillé sur le fonctionnement de Vérification d'Âge PrestaShop – Modal Bloquante pour CBD, Alcool, Vape & Pro de Santé, pourquoi nous l'avons conçu ainsi, et la réflexion derrière les fonctionnalités ci-dessus.
Pourquoi un module dédié plutôt qu'un popup générique
Les popups marketing classiques se ferment d'un clic, ne valident rien, ne posent pas de cookie de conformité, et n'ont aucune trace en base. Pour un site CBD ou alcool contrôlé par la DGCCRF, c'est une non-conformité directe. Pour un revendeur de matériel médical contrôlé sur l'article L5122-9, c'est un risque sur l'autorisation de mise sur le marché. dfagegate fait l'inverse : modale réellement bloquante (lock scroll, trap focus), validation côté serveur, cookie SameSite/Secure, logs avec IP hashée. C'est un outil de conformité, pas un widget marketing.
Le mode standard : CBD, alcool, vape, armurerie
Pour la majorité des marchés réglementés à 18 ans (ou 21 dans certains pays). Trois types de vérification au choix selon votre profil de risque : boutons Oui/Non (rapide, faible friction, suffisant pour CBD ou alcool grand public), date de naissance complète avec calcul d'âge côté serveur via DateTimeImmutable (impossible à bypasser via DevTools, recommandé pour l'armurerie ou les liquides nicotinés), redirection configurable en cas de refus vers une page tierce.
Le mode médical : conformité L5122-9 du Code de la santé publique
L'article L5122-9 interdit la publicité auprès du grand public pour certains dispositifs médicaux et les réserve aux professionnels de santé habilités. dfagegate matérialise la déclaration : liste de professions personnalisable (médecin, pharmacien, kiné, dentiste, vétérinaire…), case à cocher de déclaration sur l'honneur, validation optionnelle du numéro RPPS ou ADELI via regex (9 à 11 chiffres). Le numéro n'est jamais stocké en base — il sert uniquement à la validation. C'est l'esprit de la conformité minimale viable : une trace de la déclaration, sans collecte excessive.
Multi-boutique et multilingue dès l'install
Toutes les configurations (mode, type de vérification, textes, couleurs, bypass) sont stockées par contexte boutique via id_shop_group / id_shop. Vous pouvez avoir une boutique CBD à 18 ans en FR et une boutique vape à 21 ans en US dans le même PrestaShop, chacune avec ses textes et son cookie. Les hooks sont enregistrés sur toutes les boutiques au moment de l'installation via Shop::getCompleteListOfShopsID(), évitant le piège classique du module qui ne tourne que sur la boutique courante.
Robustesse côté thème : fallback JS d'injection
Le hook displayBeforeBodyClosingTag est censé être universel sur PrestaShop 1.7.5+, mais nombre de thèmes personnalisés l'omettent dans leur layout. dfagegate gère ce cas : la modale HTML pré-rendue est passée en JS via Media::addJsDef. Au DOMContentLoaded, le script vérifie si l'élément dfagegate-modal existe dans le DOM. Sinon, il l'injecte lui-même via insertAdjacentHTML. Marche sur n'importe quel thème, sans toucher au layout. Un message console.info confirme si le fallback s'est activé.
RGPD : cookie strictement nécessaire, IP hashée
Le cookie dfagegate_ok rentre dans la catégorie « strictement nécessaire au respect d'une obligation légale d'accès » au sens de l'article 82 de la loi Informatique et Libertés — il est exempté de consentement préalable, contrairement aux cookies marketing. Sa valeur est binaire (1 = confirmé), durée configurable, SameSite=Lax, Secure en HTTPS. Les logs de refus optionnels stockent une IP hashée SHA-256 (jamais en clair) pour protéger la vie privée tout en permettant la statistique. Compatible avec n'importe quelle bannière de consentement existante.
Diagnostic intégré pour debug rapide
Une fois activé, dfagegate ajoute dans la balise head un commentaire HTML du type « dfagegate v1.0.3 enabled=1 should_display=1 ». En cas de problème, vous lisez directement le code source de la page : enabled=0 signifie toggle pas activé, should_display=0 signifie qu'un bypass est actif (IP, path, ou client connecté), absence du commentaire signifie hook pas enregistré. Plus besoin de chercher dans les logs.
Il n’y a pas encore d’avis.