Centre de Notifications pour Shopware 6 — Installation, configuration et documentation technique
Installer, configurer et étendre le Centre de Notifications : cloche dans l'en-tête, notifications produits et promo automatiques, planification, ciblage et KPI pour Shopware 6.5, 6.6 et 6.7.
Présentation
Le Centre de Notifications DataFirefly ajoute une cloche de notifications dans l’en-tête du storefront Shopware 6, juste à côté du panier. Un badge rouge indique le nombre de messages non lus (affiché « 9+ » au-delà de neuf) et un panneau déroulant présente vos annonces, nouveaux produits et codes promo.
Le plugin gère trois types de notifications : les annonces rédigées manuellement, les notifications produit créées automatiquement à chaque nouveau produit (image et lien résolus en temps réel) et les codes promo dotés d’un bouton « Copier ». Chaque notification peut être planifiée, ciblée par groupe client et par canal de vente, priorisée, et suivie via des KPI de vues et de clics.
Un seul plugin, un seul ZIP, compatible Shopware 6.5, 6.6 et 6.7 — y compris l’administration basée sur Vite de la 6.7, livrée pré-compilée sans étape de build.
Prérequis
- Shopware 6.5, 6.6 ou 6.7 (
shopware/core~6.5 || ~6.6 || ~6.7) - Accès à la ligne de commande pour vider le cache et installer les assets
- Aucune dépendance externe, aucun service tiers
Installation
- Dans l’administration, allez dans Extensions → Mes extensions → Téléverser l’extension et sélectionnez le ZIP.
- Installez puis activez le plugin.
- Videz le cache et installez les assets :
bin/console plugin:refresh
bin/console plugin:install --activate DffNotificationCenter
bin/console assets:install
bin/console cache:clear
Après installation ou mise à jour, videz aussi le cache de votre navigateur (Ctrl+F5) sur la page d’administration pour recharger le module.
Shopware 6.7 (administration Vite)
Le module d’administration est livré pré-compilé avec un fichier entrypoints.json Vite. Il se charge tel quel sur 6.5, 6.6 et 6.7 sans étape de build. Il suffit de relancer, après chaque mise à jour :
bin/console assets:install
bin/console cache:clear
Configuration
Rendez-vous dans Extensions → Mes extensions → Centre de Notifications → Configuration. Les réglages sont scopables par canal de vente.
Cloche de notifications
- Activer la cloche (défaut : oui) : affiche ou masque la cloche dans le storefront.
- Nombre maximum de notifications affichées (défaut : 10) : borné entre 1 et 50 côté serveur.
- Rafraîchissement en arrière-plan (défaut : 60 s) : intervalle de sondage,
0pour désactiver. - Son (défaut : non) : joue un son à la réception d’une notification.
- Animation (défaut : oui) : anime la cloche en présence de notifications non lues.
Notifications produits automatiques
- Créer une notification pour chaque nouveau produit (défaut : oui).
- Uniquement pour les produits actifs (défaut : oui).
- Expiration automatique (défaut : 30 jours,
0= jamais) : au-delà, la notification produit n’est plus diffusée.
Notifications promo automatiques
- Créer une notification à la création d’une promotion avec code (défaut : non, à activer explicitement).
La notification promo est créée dès qu’une promotion active possède un code global. Par conception, les codes individuels ne sont jamais diffusés.
Gérer les notifications dans l’administration
Le module de gestion se trouve dans Marketing → Centre de Notifications. Vous y créez, planifiez, ciblez et priorisez vos annonces, et vous consultez les KPI vues/clics.
Trois types sont disponibles :
- Annonce (
manual) : titre, message, libellé de bouton et lien libres. - Produit (
product) : liée à un produit ; l’image de couverture et le lien vers la fiche sont résolus en temps réel à chaque affichage — jamais de lien cassé. - Code promo (
promo) : affiche un code avec un bouton « Copier » côté client.
Planification, ciblage et priorité
- Planification : dates
validFrom/validUntil; une notification en dehors de sa fenêtre n’est pas diffusée. - Ciblage groupe client : limite la diffusion à un groupe client donné (vide = tous).
- Ciblage canal de vente : limite à un canal (vide = tous), utile en multi-boutique.
- Priorité : entier ; les priorités les plus élevées s’affichent en premier, puis tri par date de création décroissante.
Fonctionnement côté client
La cloche s’insère dans l’en-tête via une extension Twig (sw_extends). Si votre thème personnalise fortement l’en-tête, un fallback JavaScript insère automatiquement la cloche à côté du panier.
Le panneau récupère les notifications via un appel AJAX. Le badge affiche le nombre de non-lus, avec son et animation optionnels et un rafraîchissement en arrière-plan configurable. L’interface est accessible : attributs ARIA, navigation clavier, et affichage en bottom-sheet sur mobile.
État de lecture : pour les clients connectés, il est enregistré côté serveur (table dff_notification_read) et donc synchronisé entre appareils. Pour les invités, il reste dans le localStorage du navigateur — aucune donnée personnelle n’est collectée.
Architecture technique
Le plugin suit les conventions Shopware : entités déclarées via la Data Abstraction Layer (DAL), contrôleur storefront renvoyant du JSON, subscribers d’événements et migration SQL. Aucun override — les templates sont étendus via sw_extends, le code est 100 % natif.
Entités et Data Abstraction Layer
L’entité principale dff_notification (NotificationDefinition) porte les champs : type, active, priority, validFrom, validUntil, customerGroupId, salesChannelId, productId (+ productVersionId), promotionId, promoCode, views et clicks. Les champs traduisibles title, message, buttonLabel et linkUrl sont portés par l’entité de traduction dff_notification_translation.
Associations : ManyToOne vers customer_group, sales_channel, product et promotion ; OneToMany vers dff_notification_read (état de lecture par client). Les définitions sont enregistrées avec le tag shopware.entity.definition et exposées à l’API (ApiAware).
Schéma de base de données
La migration Migration1781049600NotificationCenter crée trois tables :
dff_notification: la notification, avec index suractiveet sur(product_id, product_version_id). Clés étrangères verscustomer_groupetsales_channel(ON DELETE SET NULL) et versproduct(ON DELETE CASCADE).dff_notification_translation: traductions par langue (title,message,button_label,link_url).dff_notification_read: couples notification/client, avec index unique sur(dff_notification_id, customer_id)pour éviter les doublons de lecture.
Routes AJAX du storefront
Les routes sont déclarées en XML (Resources/config/routes.xml) pour rester compatibles de Shopware 6.5 à 6.7 (Symfony 6.x et 7.x). Le contrôleur étend AbstractController — et non StorefrontController — car il ne renvoie que du JSON et setTwig() a disparu en 6.7.
GET /dff-nc/list→list(): renvoie les notifications diffusables et incrémente leurs vues.POST /dff-nc/read→markRead(): marque comme lu côté serveur (clients connectés) ; pour les invités, la réponse indique un stockageclient.POST /dff-nc/click/{id}→click(): incrémente le compteur de clics.
Logique de diffusion (contrôleur list)
La requête DAL filtre les notifications active = true, dans leur fenêtre de validité (validFrom ≤ maintenant ≤ validUntil, bornes nulles admises), correspondant au canal de vente courant (ou nul) et au groupe client courant (ou nul), triées par priorité puis date décroissantes. Les produits liés sont ensuite résolus dynamiquement (association cover.media) : une notification produit dont le produit est supprimé ou indisponible dans le canal est masquée silencieusement. Les vues des notifications réellement délivrées sont incrémentées en une seule requête.
Notifications automatiques (subscribers)
ProductSubscriber écoute product.written. À chaque insert de produit sur la version live (les variantes avec parentId sont ignorées), et si l’option est activée, il crée une notification de type product — en respectant le filtre « produits actifs uniquement », la durée de vie configurée (validUntil) et un contrôle anti-doublon par produit.
PromotionSubscriber écoute promotion.written. Comme l’administration crée d’abord la promotion puis renseigne le code et l’activation par mises à jour successives, il réagit aux inserts et aux updates. Une notification promo n’est créée que si la promotion est active et possède un code global, avec report des dates validFrom/validUntil de la promotion et contrôle anti-doublon par promotion.
Internationalisation
Trois langues sont livrées pour le storefront et l’administration : français, anglais et allemand (snippets fr-FR, en-GB, de-DE). Les titres et messages par défaut des notifications produit et promo sont générés via le service de traduction (clés dffNc.*).
Confidentialité (RGPD)
Le plugin ne collecte aucune donnée personnelle. L’état de lecture des invités reste dans leur navigateur (localStorage) ; celui des clients connectés est stocké côté serveur et rattaché à leur compte. Les compteurs de vues et de clics sont agrégés au niveau de la notification, sans profil individuel.
Désinstallation
À la désinstallation, les tables dff_notification_read, dff_notification_translation et dff_notification sont supprimées — sauf si l’option « conserver les données de l’utilisateur » est cochée, auquel cas elles sont laissées intactes.
Dépannage
- La cloche n’apparaît pas : vérifiez que la cloche est activée dans la configuration, relancez
assets:installetcache:clear, puis videz le cache navigateur. Le fallback JS s’insère à côté du panier si le thème surcharge l’en-tête. - Aucune notification produit créée : l’option doit être activée, le produit doit être un produit racine (pas une variante) et, si le filtre est actif, être marqué actif.
- Aucune notification promo créée : l’option est désactivée par défaut ; la promotion doit être active et disposer d’un code global (les codes individuels ne sont pas diffusés).
- Module d’administration non chargé sur 6.7 : relancez
assets:installpuiscache:clearet forcez le rechargement navigateur (Ctrl+F5).