Module professionnel de gestion du consentement cookies conforme RGPD pour PrestaShop 9. Offre une interface utilisateur moderne, une journalisation complète des consentements et une intégration transparente avec les outils d'analyse et de marketing.
- ✅ Journalisation pseudonymisée des consentements
- ✅ Gestion des versions de politique de confidentialité
- ✅ Conservation configurable des logs (défaut: 6 mois)
- ✅ Preuve de consentement avec horodatage
- ✅ Modal responsive avec design adaptatif
- ✅ Support du mode sombre automatique
- ✅ Animations fluides et accessibilité
- ✅ Compatible mobile/tablette
- ✅ Cookies essentiels (toujours actifs)
- ✅ Analytics (Google Analytics, Matomo...)
- ✅ Marketing (Facebook Pixel, Google Ads...)
- ✅ Activation conditionnelle des scripts
- ✅ JavaScript ES6+ avec Webpack
- ✅ SCSS modulaire et variables CSS
- ✅ Tests unitaires et d'intégration PHPUnit
- ✅ Code documenté et typé (PHP 8.3+)
# Copier le module dans /modules/
cp -r cookychef /var/www/html/modules/
# Activer depuis le back-office PrestaShop
# Modules > Gestionnaire de modules > Rechercher "Cookychef"cd modules/cookychef/_dev
# Installation des dépendances
npm install
# Development (watch mode)
npm run dev
# Production (minification)
npm run build- Back-office → Modules → Cookychef → Configurer
- Définir le titre et la description
- Configurer le lien vers la politique de confidentialité
- Ajuster la version de politique si nécessaire
<!-- Dans votre template, différer GA avec data-consent -->
<script type="text/plain" data-consent="analytics" data-src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script type="text/plain" data-consent="analytics">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'GA_MEASUREMENT_ID');
</script><script type="text/plain" data-consent="marketing">
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
</script><iframe data-consent="marketing"
data-src="https://www.youtube.com/embed/VIDEO_ID"
width="560"
height="315">
<p>Veuillez accepter les cookies marketing pour voir cette vidéo.</p>
</iframe>// Écouter les changements de consentement
window.addEventListener('cookychef:consent:change', function(event) {
const preferences = event.detail.preferences;
console.log('Analytics:', preferences.analytics);
console.log('Marketing:', preferences.marketing);
// Votre logique personnalisée
if (preferences.analytics) {
// Activer tracking analytics
}
});
// Callback legacy (compatibilité)
window.cookychefOnConsentChange = function(preferences) {
// Votre code...
};// Accès à l'API du module
const api = window.CookychefConsent;
// Activation manuelle de scripts
api.ContentManager.activateScriptsFor('analytics');
// Émission d'événements personnalisés
api.Events.emitConsentChange({analytics: true, marketing: false});
// Fermeture manuelle de la modal
api.ModalManager.close();cookychef/
├── 📁 _dev/ # Développement
│ ├── 📁 js/ # Sources JavaScript
│ │ ├── front.js # Script principal ES6+
│ │ └── admin.js # Interface admin
│ ├── 📁 scss/ # Sources SCSS
│ │ ├── front.scss # Styles modal front
│ │ └── admin.scss # Styles admin
│ ├── 📁 tests/ # Tests unitaires
│ │ ├── 📁 Unit/ # Tests unitaires
│ │ ├── 📁 Integration/ # Tests d'intégration
│ │ └── phpunit.xml.dist # Config PHPUnit
│ ├── package.json # Dépendances Node.js
│ └── webpack.config.js # Configuration build
├── 📁 classes/ # Classes métier
│ ├── CookieConsentLogger.php # Journalisation RGPD
│ └── cookychef_status.class.php
├── 📁 controllers/ # Contrôleurs
│ ├── 📁 admin/ # Back-office
│ └── 📁 front/ # Front-office + AJAX
├── 📁 translations/ # Traductions i18n
│ └── 📁 fr-FR/ # Français
│ ├── Modules.Cookychef.Admin.fr-FR.xlf
│ └── Modules.Cookychef.Shop.fr-FR.xlf
├── 📁 views/ # Assets compilés + Templates
│ ├── 📁 css/ # CSS compilés
│ ├── 📁 js/ # JS compilés
│ └── 📁 templates/ # Templates Smarty
├── cookychef.php # Module principal
└── README.md # Documentation
cd _dev/tests
# Installation PHPUnit (si nécessaire)
composer install
# Tous les tests
./vendor/bin/phpunit
# Tests spécifiques
./vendor/bin/phpunit --filter="CookieConsentFlowTest"
# Couverture de code
./vendor/bin/phpunit --coverage-html coverage-html/- ✅ Tests unitaires : Logique métier isolée
- ✅ Tests d'intégration : Flux complets utilisateur
- ✅ Tests de compatibilité : Système legacy
- ✅ Tests RGPD : Journalisation et conformité
Le module crée automatiquement la table cookychef_cookie_consent_log :
CREATE TABLE `ps_cookychef_cookie_consent_log` (
`id_cookychef_cookie_consent_log` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`consent_uid` VARCHAR(64) NOT NULL, -- Identifiant pseudonyme
`id_customer` INT UNSIGNED NULL, -- Client connecté (optionnel)
`id_shop` INT UNSIGNED NOT NULL, -- Boutique
`policy_version` INT UNSIGNED DEFAULT 1, -- Version politique
`event` VARCHAR(16) NOT NULL, -- accept_all|refuse_all|save_prefs
`choices_json` TEXT NOT NULL, -- Choix détaillés JSON
`ip_hash` CHAR(64) NULL, -- IP hachée (pseudonymisation)
`ua_hash` CHAR(64) NULL, -- User-Agent haché
`country_iso` CHAR(2) NULL, -- Code pays (si détectable)
`date_add` DATETIME DEFAULT CURRENT_TIMESTAMP,
KEY `idx_consent_uid` (`consent_uid`),
KEY `idx_date_add` (`date_add`)
);- ✅ Cache intelligent : Modal en cache jusqu'à changement config
- ✅ Chargement asynchrone : Scripts différés conditionnellement
- ✅ Bundle minifié : Webpack avec Terser + CSSNano
- ✅ Lazy loading : Iframes et contenus tiers
- ✅ CDN ready : Assets compatibles CDN
- 📦 JS minifié : ~8KB gzipped
- 🎨 CSS minifié : ~4KB gzipped
- ⚡ Time to Interactive : < 100ms
- 📱 Mobile-first : Responsive natif
// Surcharge des variables dans votre thème
$modal-primary-color: #your-brand-color;
$modal-border-radius: 8px;
// Import du module
@import "modules/cookychef/views/css/front.css";{* Surcharge dans themes/your-theme/modules/cookychef/ *}
{extends file='modules/cookychef/views/templates/front/modal.tpl'}
{block name="consent_title"}
<h2>🍪 {l s='Notre politique cookies' mod='cookychef'}</h2>
{/block}- ✅ Coding Standards PrestaShop 9
- ✅ PSR-12 pour PHP
- ✅ ESLint pour JavaScript
- ✅ StyleLint pour SCSS
# Clone et setup
git clone https://github.com/votre-repo/cookychef.git
cd cookychef/_dev && npm install
# Développement avec hot reload
npm run dev
# Tests avant commit
./vendor/bin/phpunit && npm test
# Build production
npm run build- Vérifier les issues existantes
- Créer une nouvelle issue avec :
- Version PrestaShop
- Version PHP
- Navigateur et version
- Console browser (erreurs JS)
- Log PrestaShop (erreurs PHP)
Ce module est distribué sous licence Academic Free License 3.0 (AFL-3.0).
- Atelier-Legoff - Développement initial et maintenance
- ThemeVolty - Design et UX
- Communauté PrestaShop - Feedback et tests
⭐ Si ce module vous aide, n'hésitez pas à laisser une étoile !
Conçu avec ❤️ pour la communauté PrestaShop