# Centre de Notifications pour Shopware 6 — Installation, configuration et documentation technique

> 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…

- Page: <https://www.datafirefly.com/documentation/dff-notification-center-shopware/>
- Langue: fr
- Mis à jour le: 2026-07-08
- Autres langues: [en](https://www.datafirefly.com/en/documentation/dff-notification-center-shopware/index.md), [de](https://www.datafirefly.com/de/documentation/dff-notification-center-shopware/index.md), [es](https://www.datafirefly.com/es/documentation/dff-notification-center-shopware/index.md), [it](https://www.datafirefly.com/it/documentation/dff-notification-center-shopware/index.md), [pl](https://www.datafirefly.com/pl/documentation/dff-notification-center-shopware/index.md), [nl](https://www.datafirefly.com/nl/documentation/dff-notification-center-shopware/index.md), [pt](https://www.datafirefly.com/pt/documentation/dff-notification-center-shopware/index.md)
- Index: <https://www.datafirefly.com/documentation/llms.txt>

## 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

1. Dans l'administration, allez dans **Extensions → Mes extensions → Téléverser l'extension** et sélectionnez le ZIP.
2. Installez puis **activez** le plugin.
3. 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, `0` pour 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 sur `active` et sur `(product_id, product_version_id)`. Clés étrangères vers `customer_group` et `sales_channel` (`ON DELETE SET NULL`) et vers `product` (`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 stockage `client`.
- `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:install` et `cache: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:install` puis `cache:clear` et forcez le rechargement navigateur (Ctrl+F5).
