# Notificatiecentrum voor Shopware 6: installatie, configuratie en technische documentatie

> Overzicht Het DataFirefly Notificatiecentrum voegt een notificatiebel toe aan de header van de Shopware 6 storefront, direct naast de winkelwagen. Een rode badge geeft het aantal ongelezen berichten weer (boven…

- Pagina: <https://www.datafirefly.com/nl/documentation/dff-notification-center-shopware/>
- Taal: nl
- Bijgewerkt op: 2026-08-18
- Andere talen: [fr](https://www.datafirefly.com/documentation/dff-notification-center-shopware/index.md), [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), [pt](https://www.datafirefly.com/pt/documentation/dff-notification-center-shopware/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

Het DataFirefly Notificatiecentrum voegt een **notificatiebel** toe aan de header van de Shopware 6 storefront, direct naast de winkelwagen. Een rode badge geeft het aantal ongelezen berichten weer (boven negen wordt "9+" getoond) en een uitklappaneel presenteert uw aankondigingen, nieuwe producten en kortingscodes.

De plugin ondersteunt drie soorten meldingen: handmatig opgestelde **aankondigingen**, **productmeldingen** die automatisch worden aangemaakt bij elk nieuw product (afbeelding en link worden in realtime opgelost) en **kortingscodes** met een knop "Kopiëren". Elke melding kan worden ingepland, getarget per klantgroep en per verkoopkanaal, geprioriteerd en gevolgd via KPI's voor weergaven en kliks.

Eén plugin, één ZIP, compatibel met **Shopware 6.5, 6.6 en 6.7**, inclusief de op Vite gebaseerde administration van 6.7, vooraf gecompileerd geleverd zonder buildstap.

## Vereisten

- Shopware 6.5, 6.6 of 6.7 (`shopware/core` ~6.5 || ~6.6 || ~6.7)
- Toegang tot de commandoregel om de cache te legen en de assets te installeren
- Geen externe afhankelijkheden, geen diensten van derden

## Installatie

1. Ga in de administration naar **Extensies → Mijn extensies → Extensie uploaden** en selecteer de ZIP.
2. Installeer en **activeer** de plugin.
3. Leeg de cache en installeer de assets:

```
bin/console plugin:refresh
bin/console plugin:install --activate DffNotificationCenter
bin/console assets:install
bin/console cache:clear
```

Leeg na installatie of update ook de cache van uw browser (Ctrl+F5) op de administratiepagina om de module opnieuw te laden.

### Shopware 6.7 (Vite-administration)

De administratiemodule wordt **vooraf gecompileerd** geleverd met een Vite-bestand `entrypoints.json`. De module laadt zonder aanpassing op 6.5, 6.6 en 6.7, zonder buildstap. Voer na elke update simpelweg opnieuw uit:

```
bin/console assets:install
bin/console cache:clear
```

## Configuratie

Ga naar **Extensies → Mijn extensies → Notificatiecentrum → Configuratie**. De instellingen kunnen per verkoopkanaal worden ingesteld.

### Notificatiebel

- **Bel activeren** (standaard: ja): toont of verbergt de bel in de storefront.
- **Maximaal aantal getoonde meldingen** (standaard: 10): server-side begrensd tussen 1 en 50.
- **Verversing op de achtergrond** (standaard: 60 s): polling-interval, `0` om uit te schakelen.
- **Geluid** (standaard: nee): speelt een geluid af bij ontvangst van een melding.
- **Animatie** (standaard: ja): animeert de bel wanneer er ongelezen meldingen zijn.

### Automatische productmeldingen

- **Een melding aanmaken voor elk nieuw product** (standaard: ja).
- **Alleen voor actieve producten** (standaard: ja).
- **Automatisch verlopen** (standaard: 30 dagen, `0` = nooit): daarna wordt de productmelding niet meer getoond.

### Automatische promotiemeldingen

- **Een melding aanmaken bij het aanmaken van een promotie met code** (standaard: **nee**, expliciet te activeren).

De promotiemelding wordt aangemaakt zodra een **actieve** promotie een **globale code** heeft. Individuele codes worden per ontwerp nooit getoond.

## Meldingen beheren in de administration

De beheermodule vindt u onder **Marketing → Notificatiecentrum**. Daar maakt u meldingen aan, plant u ze in, targetet en prioriteert u ze, en raadpleegt u de KPI's voor weergaven en kliks.

Er zijn drie types beschikbaar:

- **Aankondiging** (`manual`): vrije titel, bericht, knoplabel en link.
- **Product** (`product`): gekoppeld aan een product; de coverafbeelding en de link naar de productpagina worden bij elke weergave in realtime opgelost, dus nooit een gebroken link.
- **Kortingscode** (`promo`): toont een code met een knop "Kopiëren" aan klantzijde.

### Planning, targeting en prioriteit

- **Planning**: data `validFrom` / `validUntil`; een melding buiten haar venster wordt niet getoond.
- **Targeting op klantgroep**: beperkt de weergave tot een bepaalde klantgroep (leeg = iedereen).
- **Targeting op verkoopkanaal**: beperkt tot één kanaal (leeg = alle), handig bij meerdere shops.
- **Prioriteit**: geheel getal; de hoogste prioriteiten verschijnen eerst, daarna wordt gesorteerd op aanmaakdatum aflopend.

## Werking aan klantzijde

De bel wordt in de header ingevoegd via een Twig-extensie (`sw_extends`). Als uw thema de header sterk aanpast, voegt een JavaScript-_fallback_ de bel automatisch naast de winkelwagen in.

Het paneel haalt de meldingen op via een AJAX-aanroep. De badge toont het aantal ongelezen items, met optioneel geluid en animatie en een instelbare verversing op de achtergrond. De interface is toegankelijk: ARIA-attributen, toetsenbordnavigatie en weergave als _bottom sheet_ op mobiel.

**Leesstatus:** voor ingelogde klanten wordt deze server-side opgeslagen (tabel `dff_notification_read`) en dus gesynchroniseerd tussen apparaten. Voor gasten blijft de status in de `localStorage` van de browser; er worden geen persoonsgegevens verzameld.

## Technische architectuur

De plugin volgt de Shopware-conventies: entiteiten gedeclareerd via de Data Abstraction Layer (DAL), een storefront-controller die JSON teruggeeft, event subscribers en een SQL-migratie. Geen enkele override: de templates worden uitgebreid via `sw_extends` en de code is 100 % native.

### Entiteiten en Data Abstraction Layer

De hoofdentiteit `dff_notification` (`NotificationDefinition`) bevat de velden: `type`, `active`, `priority`, `validFrom`, `validUntil`, `customerGroupId`, `salesChannelId`, `productId` (+ `productVersionId`), `promotionId`, `promoCode`, `views` en `clicks`. De vertaalbare velden `title`, `message`, `buttonLabel` en `linkUrl` zitten in de vertaalentiteit `dff_notification_translation`.

Associaties: `ManyToOne` naar `customer_group`, `sales_channel`, `product` en `promotion`; `OneToMany` naar `dff_notification_read` (leesstatus per klant). De definities worden geregistreerd met de tag `shopware.entity.definition` en beschikbaar gesteld aan de API (`ApiAware`).

### Databaseschema

De migratie `Migration1781049600NotificationCenter` maakt drie tabellen aan:

- `dff_notification`: de melding, met een index op `active` en op `(product_id, product_version_id)`. Foreign keys naar `customer_group` en `sales_channel` (`ON DELETE SET NULL`) en naar `product` (`ON DELETE CASCADE`).
- `dff_notification_translation`: vertalingen per taal (`title`, `message`, `button_label`, `link_url`).
- `dff_notification_read`: combinaties melding/klant, met een unieke index op `(dff_notification_id, customer_id)` om dubbele leesregistraties te voorkomen.

### AJAX-routes van de storefront

De routes worden in XML gedeclareerd (`Resources/config/routes.xml`) om compatibel te blijven van Shopware 6.5 tot 6.7 (Symfony 6.x en 7.x). De controller breidt `AbstractController` uit, en niet `StorefrontController`, omdat hij alleen JSON teruggeeft en `setTwig()` in 6.7 is verdwenen.

- `GET /dff-nc/list` → `list()`: geeft de te tonen meldingen terug en verhoogt hun weergaveteller.
- `POST /dff-nc/read` → `markRead()`: markeert als gelezen aan serverzijde (ingelogde klanten); voor gasten geeft het antwoord aan dat de opslag `client` is.
- `POST /dff-nc/click/{id}` → `click()`: verhoogt de klikteller.

### Weergavelogica (controller list)

De DAL-query filtert de meldingen op `active = true`, binnen hun geldigheidsvenster (`validFrom` ≤ nu ≤ `validUntil`, lege grenzen toegestaan), overeenkomend met het huidige verkoopkanaal (of leeg) en de huidige klantgroep (of leeg), gesorteerd op prioriteit en daarna op datum aflopend. De gekoppelde producten worden vervolgens dynamisch opgelost (associatie `cover.media`): een productmelding waarvan het product verwijderd of niet beschikbaar is in het kanaal wordt stilzwijgend verborgen. De weergaven van de daadwerkelijk geleverde meldingen worden in één enkele query verhoogd.

### Automatische meldingen (subscribers)

**ProductSubscriber** luistert naar `product.written`. Bij elke _insert_ van een product op de _live_-versie (varianten met een `parentId` worden genegeerd) maakt hij, als de optie geactiveerd is, een melding van het type `product` aan, met inachtneming van het filter "alleen actieve producten", de ingestelde levensduur (`validUntil`) en een duplicaatcontrole per product.

**PromotionSubscriber** luistert naar `promotion.written`. Omdat de administration eerst de promotie aanmaakt en daarna de code en de activering via opeenvolgende updates invult, reageert hij zowel op _inserts_ als op _updates_. Een melding van het type `promo` wordt alleen aangemaakt als de promotie **actief** is en een **globale code** heeft, waarbij de data `validFrom`/`validUntil` van de promotie worden overgenomen en een duplicaatcontrole per promotie wordt uitgevoerd.

### Internationalisatie

Er worden drie talen geleverd voor de storefront en de administration: Frans, Engels en Duits (snippets `fr-FR`, `en-GB`, `de-DE`). De standaardtitels en -berichten van de product- en promotiemeldingen worden gegenereerd via de vertaaldienst (sleutels `dffNc.*`).

## Privacy (AVG)

De plugin verzamelt geen persoonsgegevens. De leesstatus van gasten blijft in hun browser (`localStorage`); die van ingelogde klanten wordt server-side opgeslagen en aan hun account gekoppeld. De tellers voor weergaven en kliks worden geaggregeerd op het niveau van de melding, zonder individueel profiel.

## Verwijderen

Bij het verwijderen worden de tabellen `dff_notification_read`, `dff_notification_translation` en `dff_notification` verwijderd, **behalve** wanneer de optie "gebruikersgegevens behouden" is aangevinkt; in dat geval blijven ze intact.

## Probleemoplossing

- **De bel verschijnt niet**: controleer of de bel geactiveerd is in de configuratie, voer `assets:install` en `cache:clear` opnieuw uit en leeg daarna de browsercache. De JS-fallback plaatst de bel naast de winkelwagen als het thema de header overschrijft.
- **Geen productmelding aangemaakt**: de optie moet geactiveerd zijn, het product moet een hoofdproduct zijn (geen variant) en, als het filter actief is, als actief gemarkeerd zijn.
- **Geen promotiemelding aangemaakt**: de optie is standaard uitgeschakeld; de promotie moet actief zijn en over een globale code beschikken (individuele codes worden niet getoond).
- **Administratiemodule laadt niet op 6.7**: voer `assets:install` en daarna `cache:clear` opnieuw uit en forceer het herladen van de browser (Ctrl+F5).
