PS PrestaShop Mittel

dfomnibus — EU-Omnibus-Richtlinien-Compliance für PrestaShop

Installation, Konfiguration, Cron, Berechnungsmodi, Dashboard und Fehlerbehebung des dfomnibus-Moduls für die EU-Omnibus-Richtlinien-Compliance.

Aktualisiert Modulversion 1.0.1

Das Modul dfomnibus bringt Ihren PrestaShop-Shop in Übereinstimmung mit der europäischen Richtlinie 2019/2161, bekannt als Omnibus, die seit dem 28. Mai 2022 in der gesamten Europäischen Union in Kraft ist. Es baut kontinuierlich die Preishistorie jedes Produkts auf und zeigt, sobald eine Aktion aktiv ist, den niedrigsten Preis der 30 vorangehenden Tage an.

Kompatibilität: PrestaShop 8.0 bis 9.x. PHP 7.4 bis 8.3. Multishop, Multiwährung und Multikombination werden nativ unterstützt. Keine Drittanbieter-Komponenten, kein CDN, DSGVO-konform.

Installation

Die Installation dauert weniger als fünf Minuten.

  1. Laden Sie die Datei dfomnibus_v1.0.1.zip aus Ihrem DataFirefly-Kundenbereich herunter.
  2. Gehen Sie im PrestaShop-Backoffice zu Module → Modulverwaltung → Modul hochladen.
  3. Laden Sie das ZIP hoch. PrestaShop erstellt die Tabellen, generiert ein Cron-Token und registriert die erforderlichen Hooks.
  4. Klicken Sie auf Konfigurieren, um den Einstellungsbildschirm zu öffnen.

Zwei erstellte Tabellen: ps_dfomnibus_price_history für die Snapshots und ps_dfomnibus_compliance_log für Compliance-Ereignisse (für zukünftige Nutzung reserviert). Das Präfix ps_ wird automatisch durch Ihres ersetzt.

Programmierung des täglichen Cron

Der Cron initialisiert die Historie Ihres Katalogs und gewährleistet die Kontinuität der täglichen Snapshots, auch für Produkte, deren Preis sich nie ändert. Ohne aktiven Cron funktioniert das Modul, aber die Historie beschränkt sich auf manuell geänderte Produkte.

Token abrufen

Öffnen Sie den Konfigurationsbildschirm des Moduls. Das angezeigte Cron-Token ist für Ihre Installation eindeutig. Sie erhalten eine URL der Form:

https://ihr-shop.com/modules/dfomnibus/cron.php?token=IHR_TOKEN

Programmierung über Unix-Cron

Fügen Sie die folgende Zeile zu Ihrer Crontab hinzu und passen Sie die Uhrzeit an Ihren Traffic an (idealerweise in Nebenzeiten):

15 3 * * * curl -s "https://ihr-shop.com/modules/dfomnibus/cron.php?token=IHR_TOKEN" > /dev/null

Programmierung über CLI

Wenn Sie jegliche HTTP-Exposition vermeiden möchten, führen Sie den Cron direkt auf der Kommandozeile aus:

php /pfad/zu/ihrem-shop/modules/dfomnibus/cron.php token=IHR_TOKEN

Token-Sicherheit: Das Modul verwendet hash_equals() zum Vergleichen der Token, was gegen Timing-Angriffe schützt. Teilen Sie dieses Token niemals und generieren Sie es neu, wenn Sie eine Kompromittierung vermuten (Button Token neu generieren in der Konfiguration).

Konfigurationsoptionen

Anzeigeaktivierung

Der Schalter Anzeige aktivieren steuert das Einfügen des Compliance-Hinweises unter dem Produktpreis. Sie können ihn vorübergehend deaktivieren, um die Historienerfassung zu erhalten, ohne den Hinweis im Frontend anzuzeigen (nützlich bei einer Umstellung oder während Tests).

Berechnungsmodus

Zwei Modi sind verfügbar:

  • Streng: Der Referenzpreis ist das Minimum, das während der 30 Tage vor dem tatsächlichen Beginn der aktuellen Aktion erfasst wurde. Entspricht dem Wortlaut der Richtlinie.
  • Konservativ (standardmäßig empfohlen): Der Referenzpreis ist das Minimum über die zurücklaufenden 30 Tage. Für den Händler ungünstigere Auslegung, aber im Fall einer Prüfung defensiver.

Welchen Modus wählen? Wenn Ihr Shop eine klare Aktionspolitik mit gut nachverfolgbaren Start- und Endterminen hat, ist der strenge Modus ideal. Im Zweifel oder wenn Ihre SpecificPrice-Regeln häufig ohne klare Unterbrechung zwischen Aktions- und Nicht-Aktions-Perioden geändert werden, ist der konservative Modus sicherer.

Referenzzeitraum

Der Zeitraum ist standardmäßig auf 30 Tage festgelegt, gemäß der Richtlinie. Sie können ihn verlängern (60, 90 Tage), um noch vorsichtiger zu sein, aber der Mindestwert bleibt 30 Tage.

Ausschluss neuer Produkte

Die Option Produkte unter X Tagen ausschließen blendet die Anzeige für zu neue Produkte aus. Standardwert: 30 Tage. Dies steht im Einklang mit dem Geist der Richtlinie, die nur für Produkte mit signifikanter Preishistorie gilt.

EU-Beschränkung

Wenn Sie innerhalb und außerhalb der EU verkaufen, aktivieren Sie Anzeige auf die Europäische Union beschränken. Das Modul erkennt das Land des Kunden in dieser Reihenfolge:

  1. Lieferadresse des angemeldeten Kunden
  2. Adresse des aktuellen Warenkorbs
  3. Standardland des Shops

Wenn keine dieser Informationen verfügbar ist, ist die Anzeige standardmäßig aktiv, um jedes Risiko unbeabsichtigter Nichtkonformität zu vermeiden.

Ausblenden bei gleichem Preis

Die Option Ausblenden, wenn Preis identisch entfernt den Hinweis, wenn der aktuelle Preis genau dem niedrigsten Preis der letzten 30 Tage entspricht. Nützlich, um keine Informationen ohne Mehrwert für den Verbraucher anzuzeigen.

Realer Rabatt

Aktivieren Sie Realen Rabatt anzeigen, um den Hinweis um den Prozentsatz zu ergänzen, der auf Basis des Omnibus-Preises statt des durchgestrichenen Preises berechnet wird. Beispiel: Ein Produkt zu 89 €, im Angebot zu 59 €, mit einem Omnibus-Preis von 65 € zeigt -9,2 % realen Rabatt anstelle der -33 %, die auf den durchgestrichenen Preis berechnet werden. Es ist ehrlicher, aber jeder Händler ist frei zu wählen.

Diagramm

Das 30-Tage-Diagramm kann in einem dedizierten Produkt-Tab oder direkt unter dem Preis angezeigt werden. Es wird lazy per IntersectionObserver geladen und nur beim Eintritt in den Viewport ausgelöst, was einen Null-Einfluss auf die Core Web Vitals Ihrer Produktseiten garantiert.

Verfolgung pro Kombination

Aktivieren Sie Kombinationen verfolgen, wenn Ihre Produkte unterschiedliche Preise pro Kombination haben (zum Beispiel XL-Größen mit Aufpreis). Die Historie wird dann nach id_product_attribute segmentiert und der Omnibus-Hinweis passt sich an den Preis der ausgewählten Kombination an.

Aufbewahrung

Die Standard-Aufbewahrungsdauer beträgt 365 Tage. Darüber hinaus wird die Historie bei Cron-Ausführung automatisch bereinigt. Der Mindestwert beträgt 60 Tage, um eine Sicherheitsspanne gegenüber dem gesetzlichen 30-Tage-Fenster zu gewährleisten.

Compliance-Dashboard

Erreichbar über Module → DataFirefly Omnibus Dashboard, fasst das Dashboard zusammen:

  • Die Anzahl verfolgter Produkte
  • Die Gesamtzahl erfasster Snapshots
  • Datum und Uhrzeit des letzten Cron-Laufs
  • Die Liste der Produkte mit jeweils Datum der ersten Erfassung, Datum der letzten Erfassung, niedrigstem Preis der letzten 30 Tage und einem Indikator für aktive Aktionen

Für jedes Produkt stehen drei Aktionen zur Verfügung:

  • Historie anzeigen: zeigt bis zu 1000 zeitgestempelte Snapshots
  • Manueller Snapshot: erzwingt eine sofortige Erfassung
  • Historie löschen: setzt die Verfolgung für dieses Produkt zurück (mit Vorsicht verwenden)

CSV-Export

Aus der Historienansicht eines Produkts erzeugt der Button Als CSV exportieren eine Datei mit allen zeitgestempelten Spalten (Datum, Preis ohne Steuer, Preis mit Steuer, Währung, Shop, Kombination, Aktions-Indikator, Erfassungsquelle). Format bereit zum Archivieren oder zur Übergabe an einen Prüfer.

Verhalten im Frontend

Auf der Produktseite wird, sobald eine Aktion aktiv ist, der folgende Hinweis automatisch unter dem Preis angezeigt:

Niedrigster Preis der letzten 30 Tage: 65,00 €

Die Meldung wird nach der Sprache des Shops übersetzt (Französisch, Englisch, Spanisch, Deutsch). Die Anzeige verwendet den Standard-Hook displayProductPriceBlock und funktioniert mit allen Themes, die die PrestaShop-Standards respektieren (Classic, Hummingbird, Warehouse, Transformer, Panda).

Einmalige Wiedergabe pro Seite: Das Modul enthält eine static $rendered-Absicherung, die garantiert, dass der Hinweis nur einmal pro Seite erscheint, auch wenn der Hook displayProductPriceBlock mehrfach aufgerufen wird (Zusammenfassungsblöcke, Sticky, etc.).

Multishop und Multiwährung

Die Historie wird pro eindeutigem Tupel (id_product, id_product_attribute, id_shop, id_currency) gespeichert. Jeder Shop Ihrer Installation behält also seine eigene Historie, und jede aktive Währung hat ihre eigene Preiskurve. Keine Umrechnung zur Laufzeit: Die angezeigten Beträge entsprechen genau dem, was zum Zeitpunkt der Erfassung aufgezeichnet wurde.

Fehlerbehebung

Der Hinweis erscheint nicht auf der Produktseite

Prüfen Sie in dieser Reihenfolge:

  1. Ist die Option Anzeige aktivieren in der Konfiguration angehakt?
  2. Wurde der Cron mindestens einmal ausgeführt? Wenn nicht, existiert keine Historie.
  3. Ist die EU-Beschränkung aktiviert, während Sie aus einem Nicht-EU-Land testen?
  4. Ist die Option Ausblenden, wenn Preis identisch aktiviert und entspricht der aktuelle Preis dem Minimum?
  5. Ist das Produkt weniger als 30 Tage alt (mit aktiver Neuprodukt-Ausschlussoption)?

Das Diagramm lädt nicht

Öffnen Sie die Browser-Konsole. Das Modul erwartet einen AJAX-Endpunkt, der vom Front-Controller pricehistory bereitgestellt wird. Prüfen Sie, dass kein Cache-System oder Firewall diese Route abfängt. Wenn Sie ein CDN verwenden, geben Sie die URLs /module/dfomnibus/pricehistory explizit frei.

Der Cron gibt einen 403- oder 401-Fehler zurück

Das Token in der URL stimmt nicht mit dem gespeicherten überein. Gehen Sie zurück zur Modulkonfiguration und kopieren Sie das aktuelle Token. Wenn Sie ein Leck vermuten, klicken Sie auf Token neu generieren und aktualisieren Sie Ihren Unix-Cron.

SQL-Fehler beim Snapshot

Wenn Sie Version 1.0.0 nutzen, aktualisieren Sie auf 1.0.1. Die ursprüngliche Version hatte einen Defekt in drei Db::getRow()-Abfragen, die ein manuelles LIMIT 1 hinzufügten, während PrestaShop bereits eines automatisch anhängt, was ein ungültiges LIMIT 1 LIMIT 1 SQL erzeugte. Siehe Changelog.

Häufig gestellte Fragen

Ist das Modul für meinen Shop verpflichtend?

Ja, sofern Sie an Verbraucher in der Europäischen Union verkaufen und reduzierte Preise, Aktionen, Gutscheincodes, Sale-Aktionen oder andere Hinweise auf eine Preisreduzierung darstellen. Die Omnibus-Richtlinie gilt ohne Mindestumsatzschwelle.

Was ist der Unterschied zu CartRules?

Das Modul verfolgt nur Preise aus PrestaShop SpecificPrice-Datensätzen (Produkt-, Mengen-, Kundengruppen-Rabatte). Cart Rules (CartRule) werden im Checkout angewendet und ändern nicht den auf der Produktseite angezeigten Einzelpreis: Sie fallen daher außerhalb des Geltungsbereichs der Richtlinie.

Wie funktioniert der strenge Modus genau?

Das Modul sucht in der Historie den letzten Nicht-Aktions-Snapshot und dann den ersten Aktions-Snapshot, der folgt. Dieses Datum ist der Beginn der aktuellen Aktion. Das Referenzfenster sind dann die 30 Tage vor diesem Datum. Wenn kein Übergang von Nicht-Aktion zu Aktion erkennbar ist, wechselt das Modul automatisch in den konservativen Modus.

Kann ich den Hinweis für bestimmte Produkte ausblenden?

Das Modul gilt global, aber die Option zum Ausschluss neuer Produkte und die Option zum Ausblenden bei gleichem Preis decken die Mehrheit der Fälle ab, in denen die Anzeige keine nützliche Information bringt.

Kompatibel mit Preisen ohne / mit Steuer?

Ja. Das Modul erfasst beide Beträge (price_tax_excl und price_tax_incl) bei jedem Snapshot und zeigt den vom Shop verwendeten an. Wenn Sie von einem Modus in den anderen wechseln, bleibt die Historie nutzbar.

Changelog

1.0.1 — 14. Mai 2026

  • Korrektur: manuelles LIMIT 1 aus drei Db::getRow()-Abfragen entfernt, die ein ungültiges LIMIT 1 LIMIT 1 SQL erzeugten. Betraf die Idempotenz-Absicherung der Erfassung und die Aktionsstart-Erkennung im strengen Modus.

1.0.0 — 14. Mai 2026

  • Erstveröffentlichung
  • Automatische Preishistorie-Erfassung über Hooks und täglichen Cron
  • Anzeige des niedrigsten Preises der letzten 30 Tage auf der Produktseite
  • 30-Tage-Diagramm in Vanilla-Canvas, Lazy-Load, ~3 KB
  • Compliance-Dashboard mit Statistiken und CSV-Export
  • Berechnungsmodi streng und konservativ
  • Multishop-, Multiwährungs- und Multikombinations-Unterstützung
  • Konfigurierbare EU-Beschränkung, Ausschluss neuer Produkte, Option Ausblenden-bei-Gleichheit
  • Übersetzungen in FR, EN, ES, DE
War diese Seite hilfreich?

Immer noch nicht weiter? Support kontaktieren