dfomnibus: conformiteit met de Omnibus-richtlijn in PrestaShop
Installatie, configuratie, cron, berekeningsmodi, dashboard en probleemoplossing van de module dfomnibus voor de conformiteit met de Europese Omnibus-richtlijn.
De module dfomnibus brengt uw PrestaShop-webshop in overeenstemming met de Europese richtlijn 2019/2161, de zogenaamde Omnibus-richtlijn, die sinds 28 mei 2022 in de hele Europese Unie van kracht is. Hij bouwt automatisch de prijsgeschiedenis van elk product op en toont, zodra er een promotie loopt, de laagste prijs die in de 30 voorafgaande dagen werd vastgesteld.
Compatibiliteit: PrestaShop 8.0 tot 9.x, PHP 7.4 tot 8.3. Multistore, meerdere valuta en meerdere varianten worden van nature ondersteund. Geen componenten van derden, geen CDN, AVG-vriendelijk.
Installatie
De installatie duurt minder dan vijf minuten.
- Download het bestand
dfomnibus_v1.0.1.zipvanuit uw DataFirefly-klantenaccount. - Ga in de PrestaShop-backoffice naar Modules → Modulebeheer → Een module installeren.
- Upload het ZIP-bestand. PrestaShop maakt de tabellen aan, genereert een crontoken en registreert de nodige hooks.
- Klik op Configureren om het instellingenscherm te openen.
Twee aangemaakte tabellen: ps_dfomnibus_price_history voor de snapshots en ps_dfomnibus_compliance_log voor de conformiteitsevents (voorbehouden voor toekomstige uitbreidingen). Het voorvoegsel ps_ wordt automatisch door het uwe vervangen.
De dagelijkse cron instellen
De cron start de geschiedenis van uw catalogus op en garandeert de continuïteit van de dagelijkse snapshots, ook voor producten waarvan de prijs nooit verandert. Zonder actieve cron werkt de module wel, maar blijft de geschiedenis beperkt tot producten die handmatig zijn gewijzigd.
Het token ophalen
Open de configuratiepagina van de module. Het getoonde crontoken is uniek voor uw installatie. U krijgt een URL in deze vorm:
https://uw-winkel.com/modules/dfomnibus/cron.php?token=UW_TOKEN
Instellen via een Unix-cron
Voeg de volgende regel aan uw crontab toe en pas het uur aan uw verkeer aan (bij voorkeur tijdens daluren):
15 3 * * * curl -s "https://uw-winkel.com/modules/dfomnibus/cron.php?token=UW_TOKEN" > /dev/null
Instellen via CLI
Wilt u elke blootstelling via HTTP vermijden, voer de cron dan rechtstreeks op de commandoregel uit:
php /pad/naar/uw-winkel/modules/dfomnibus/cron.php token=UW_TOKEN
Beveiliging van het token: de module gebruikt hash_equals() om de tokens te vergelijken, wat beschermt tegen timing-aanvallen. Deel dit token nooit en genereer het opnieuw als u een lek vermoedt (knop Token opnieuw genereren in de configuratie).
De opties instellen
Weergave activeren
De schakelaar Weergave activeren stuurt de invoeging van de conformiteitsboodschap onder de productprijs aan. U kunt hem tijdelijk uitzetten om de geschiedenis te blijven opbouwen zonder de vermelding aan de frontend te tonen (handig bij een overschakeling of tijdens tests).
Berekeningsmodus
Er zijn twee modi:
- Strikt: de referentieprijs is het minimum dat werd vastgesteld tijdens de 30 dagen vóór de effectieve start van de lopende promotie. Dat volgt de letter van de richtlijn.
- Behoudend (standaard aanbevolen): de referentieprijs is het minimum over de laatste 30 voortschrijdende dagen. Een interpretatie die ongunstiger is voor de handelaar maar beter verdedigbaar bij een controle.
Welke modus kiezen? Heeft uw webshop een helder promotiebeleid met duidelijk afgebakende begin- en einddatums, dan is de strikte modus perfect. Twijfelt u, of worden uw SpecificPrice-regels vaak gewijzigd zonder een duidelijke breuk tussen promo- en niet-promoperiodes, dan is de behoudende modus veiliger.
Referentieperiode
De periode staat standaard op 30 dagen, conform de richtlijn. U kunt ze verhogen (60 of 90 dagen) om nog voorzichtiger te zijn, maar de minimumwaarde blijft 30 dagen.
Recente producten uitsluiten
De optie Producten jonger dan X dagen uitsluiten verbergt de weergave op te recente producten. Standaardwaarde: 30 dagen. Dat sluit aan bij de geest van de richtlijn, die alleen geldt voor producten met een betekenisvolle prijsgeschiedenis.
EU-beperking
Verkoopt u zowel binnen als buiten de EU, vink dan Weergave beperken tot de Europese Unie aan. De module bepaalt het land van de klant in deze volgorde:
- Het afleveradres van de ingelogde klant
- Het adres van de lopende winkelwagen
- Het standaardland van de winkel
Is geen van die gegevens beschikbaar, dan staat de weergave standaard aan, om elk risico op onbedoelde niet-conformiteit te vermijden.
Verbergen bij gelijke prijs
De optie Verbergen bij identieke prijs laat de boodschap weg wanneer de huidige prijs exact gelijk is aan de laagste prijs van de laatste 30 dagen. Handig om te vermijden dat u informatie toont die de consument niets bijbrengt.
Werkelijke korting
Activeer Werkelijke korting tonen om de boodschap aan te vullen met het percentage dat op basis van de Omnibus-prijs wordt berekend, en niet op de doorgestreepte prijs. Voorbeeld: een product van 89 €, in promotie aan 59 €, met een Omnibus-prijs van 65 €, toont een werkelijke korting van -9,2 % in plaats van de -33 % die op de doorgestreepte prijs is berekend. Dat is eerlijker, maar elke handelaar kiest vrij.
Grafiek
De grafiek over 30 dagen kan in een apart tabblad van de productpagina verschijnen of inline onder de prijs. Ze wordt lui geladen via IntersectionObserver en start pas wanneer ze in beeld komt, wat een nulimpact op de Core Web Vitals van uw productpagina’s garandeert.
Opvolging per variant
Vink Varianten volgen aan wanneer uw producten per combinatie verschillende prijzen hebben (bijvoorbeeld maat XL met een toeslag). De geschiedenis wordt dan per id_product_attribute gesegmenteerd en de Omnibus-vermelding past zich aan de prijs van de gekozen variant aan.
Bewaartermijn
De standaard bewaartermijn is 365 dagen. Daarna wordt de geschiedenis bij het uitvoeren van de cron automatisch opgeschoond. De minimumwaarde is 60 dagen om een veiligheidsmarge ten opzichte van het wettelijke venster van 30 dagen te garanderen.
Compliancedashboard
Bereikbaar via Modules → Dashboard DataFirefly Omnibus, bundelt het dashboard:
- Het aantal gevolgde producten
- Het totale aantal geregistreerde snapshots
- De datum en het uur van de laatste cronrun
- De lijst met producten, met per product de datum van de eerste vastlegging, de datum van de laatste vastlegging, de laagste prijs van de laatste 30 dagen en een indicator voor een lopende promotie
Per product zijn er drie acties beschikbaar:
- Geschiedenis bekijken: toont tot 1000 snapshots met tijdstempel
- Handmatige snapshot: forceert een onmiddellijke vastlegging
- Geschiedenis verwijderen: zet de opvolging voor dat product terug op nul (voorzichtig gebruiken)
CSV-export
Vanuit de geschiedenisweergave van een product genereert de knop Exporteren naar CSV een bestand met alle kolommen met tijdstempel (datum, prijs exclusief btw, prijs inclusief btw, valuta, winkel, variant, promotie-indicator, bron van de vastlegging). Een formaat dat klaar is om te archiveren of aan een controleur te bezorgen.
Gedrag aan de frontend
Op de productpagina verschijnt, zodra er een promotie loopt, automatisch de volgende vermelding onder de prijs:
Laagste prijs van de laatste 30 dagen: 65,00 €
De boodschap wordt vertaald volgens de taal van de winkel (Frans, Engels, Spaans, Duits). De weergave gebruikt de standaardhook displayProductPriceBlock en werkt met alle thema’s die de PrestaShop-standaarden volgen (Classic, Hummingbird, Warehouse, Transformer, Panda).
Eén keer per pagina: de module bevat een bescherming met static $rendered die garandeert dat de vermelding maar één keer per pagina verschijnt, ook wanneer de hook displayProductPriceBlock meermaals wordt aangeroepen (overzichtsblokken, sticky elementen enzovoort).
Multistore en meerdere valuta
De geschiedenis wordt opgeslagen per unieke combinatie (id_product, id_product_attribute, id_shop, id_currency). Elke winkel in uw installatie houdt dus een eigen geschiedenis bij, en elke actieve valuta heeft haar eigen prijscurve. Er wordt niets ter plekke omgerekend: de getoonde bedragen komen exact overeen met wat op het moment van de vastlegging is geregistreerd.
Probleemoplossing
De vermelding verschijnt niet op de productpagina
Controleer in deze volgorde:
- Staat de optie Weergave activeren wel degelijk aangevinkt in de configuratie?
- Is er minstens één keer een cron uitgevoerd? Zo niet, dan bestaat er nog geen geschiedenis.
- Staat de EU-beperking aan terwijl u vanuit een land buiten de EU test?
- Staat de optie Verbergen bij identieke prijs aan en is de huidige prijs gelijk aan de minimumprijs?
- Is het product jonger dan 30 dagen (met de optie voor het uitsluiten van nieuwe producten actief)?
De grafiek laadt niet
Open de browserconsole. De module verwacht een AJAX-ingangspunt dat de frontcontroller pricehistory aanbiedt. Controleer of geen cachesysteem of firewall die route onderschept. Gebruikt u een CDN, sta dan de URL’s /module/dfomnibus/pricehistory uitdrukkelijk toe.
De cron geeft een 403- of 401-fout
Het token in de URL komt niet overeen met het geregistreerde token. Ga terug naar de configuratie van de module en kopieer het huidige token. Vermoedt u een lek, klik dan op Token opnieuw genereren en werk uw Unix-cron bij.
SQL-fout tijdens de snapshot
Zit u op versie 1.0.0, werk dan bij naar 1.0.1. De eerste versie bevatte een fout in drie Db::getRow()-queries die handmatig een LIMIT 1 toevoegden terwijl PrestaShop er al automatisch een toevoegt, wat een ongeldige LIMIT 1 LIMIT 1 in SQL opleverde. Zie de changelog.
Veelgestelde vragen
Is de module verplicht voor mijn webshop?
Ja, als u verkoopt aan consumenten in de Europese Unie en u verlaagde prijzen, promoties, kortingscodes, solden of eender welke vermelding van een korting toont. De Omnibus-richtlijn geldt zonder omzetdrempel.
Wat is het verschil met de CartRule-objecten?
De module volgt uitsluitend prijzen die uit de SpecificPrice-objecten van PrestaShop komen (productkortingen, hoeveelheidskortingen, kortingen per klantengroep). Winkelwagenregels (CartRule) worden pas bij de checkout toegepast en wijzigen de eenheidsprijs op de productpagina niet: ze vallen dus buiten het bereik van de richtlijn.
Hoe werkt de strikte modus precies?
De module zoekt in de geschiedenis de laatste snapshot zonder promotie, en daarna de eerste snapshot met promotie die erop volgt. Die datum geldt als het begin van de lopende promotie. Het referentievenster zijn dan de 30 dagen vóór die datum. Is er geen overgang van niet-promo naar promo te herkennen, dan schakelt de module automatisch over op de behoudende modus.
Kan ik de boodschap op bepaalde producten verbergen?
De module werkt globaal, maar de optie voor het uitsluiten van recente producten en de optie voor het verbergen bij een gelijke prijs dekken de meeste gevallen waarin de weergave geen nuttige informatie oplevert.
Compatibel met prijzen exclusief en inclusief btw?
Ja. De module registreert bij elke snapshot beide bedragen (price_tax_excl en price_tax_incl) en toont het bedrag dat de winkel hanteert. Schakelt u van de ene modus naar de andere, dan blijft de geschiedenis bruikbaar.
Changelog
1.0.1, 14 mei 2026
- Correctie: de handmatige
LIMIT 1is verwijderd uit drieDb::getRow()-queries die een ongeldigeLIMIT 1 LIMIT 1in SQL opleverden. Dat trof de idempotentiebewaking bij het registreren en de detectie van het begin van een promotie in de strikte modus.
1.0.0, 14 mei 2026
- Eerste uitgave
- Automatische vastlegging van de prijsgeschiedenis via hooks en een dagelijkse cron
- Weergave van de laagste prijs over 30 dagen op de productpagina
- Grafiek over 30 dagen in vanilla canvas, lazy geladen, ongeveer 3 kB
- Compliancedashboard met statistieken en CSV-export
- Berekeningsmodi strikt en behoudend
- Ondersteuning voor multistore, meerdere valuta en meerdere varianten
- Instelbare EU-beperking, uitsluiting van recente producten en optie om te verbergen bij een identieke prijs
- Vertalingen FR, EN, ES, DE