SW Shopware 6 Gemiddeld

Notificatiecentrum voor Shopware 6: installatie, configuratie en technische documentatie

Het Notificatiecentrum installeren, configureren en uitbreiden: bel in de header, automatische product- en promotiemeldingen, planning, targeting en KPI's voor Shopware 6.5, 6.6 en 6.7.

Bijgewerkt Moduleversie 1.0.0

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/listlist(): geeft de te tonen meldingen terug en verhoogt hun weergaveteller.
  • POST /dff-nc/readmarkRead(): 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).
Was deze pagina nuttig?

Loopt u nog vast? Neem contact op met support