Alles, was Sie wissen sollten bevor Sie installieren.
Ein detaillierter Blick darauf, wie DataFirefly Dark Mode — Dunkelmodus mit Browser-Erkennung und Kundenpräferenz für Shopware 6.7 funktioniert, warum wir es so gebaut haben und der Gedanke hinter den Funktionen oben.
Warum ein Dunkelmodus in Shopware 6.7?
Shopware 6.7 bietet keinen nativen Dunkelmodus im Storefront. Dabei ist der OS-Dunkelmodus seit 2023 massiv verbreitet: iOS schaltet nachts automatisch mit True Tone um, macOS und Windows haben automatische Helligkeitseinstellungen, Power-User halten ihren Bildschirm 60-80 % der Zeit dunkel. Ein Shop ohne Dunkelmodus sendet diesen Besuchern bei jedem Seitenaufruf einen aggressiven weißen Blitz — besonders unangenehm nachts und auf Mobilgeräten. Es ist ein umgekehrtes Qualitätssignal: Ihre Website ist nicht auf dem Stand der 2026er Nutzungsgewohnheiten. DfDarkMode schließt diese Lücke mit einer sauberen, Anti-FOUC-Implementierung, die die Präferenz des Kunden respektiert.
Anti-FOUC: das Detail, das einen professionellen Dunkelmodus von einem improvisierten unterscheidet
FOUC steht für „Flash of Unstyled Content“ — der Bruchteil einer Sekunde, in dem die Seite weiß erscheint, bevor JavaScript das dunkle Theme anwendet. Die meisten Dunkelmodus-Plugins lassen diesen Blitz, weil sie das Theme über JavaScript in DOMContentLoaded anwenden, das nach dem ersten Paint des Browsers ausgeführt wird. DfDarkMode löst das Problem mit einem minimalen Inline-Skript direkt im head-Tag des Base-Layouts: Dieses Skript liest den Präferenz-Cookie (synchron, ~10 JS-Zeilen) und setzt das data-bs-theme-Attribut am Root-Element BEFORE dem ersten Paint des Browsers. Ergebnis: kein weißer Blitz, auch beim ersten Laden und im erzwungenen Dunkelmodus.
3 Zustände und vollständige Persistenz
Der Header-Toggle wechselt zwischen Auto, Hell, Dunkel. Auto folgt dem prefers-color-scheme des Browsers in Echtzeit per MediaQuery-Listener — wenn das OS des Besuchers um 18 Uhr auf Dunkel wechselt, ändert sich der Storefront sofort, ohne Seitenneuladen. Hell und Dunkel erzwingen den Modus unabhängig von der Browser-Präferenz. Die Präferenz wird je nach Status unterschiedlich gespeichert: anonyme Besucher per df-dark-mode-Cookie (1 Jahr gültig), eingeloggte Kunden per df_dark_mode_preference Kunden-Custom-Field, das bei der Installation automatisch erstellt wird. Die Kundenprofilseite enthält eine Auswahlkarte zum direkten Ändern der Präferenz. Beim Login wird der Cookie mit dem Custom-Field-Wert synchronisiert.
Bootstrap-data-bs-theme-Kompatibilität: kein CSS zu schreiben
Bootstrap 5.3+ hat die Konvention data-bs-theme="dark" als Standard für den Dunkelmodus eingeführt. Wenn Ihr Shopware-Theme bereits CSS-Regeln für den [data-bs-theme="dark"]-Selektor verwendet — der Fall bei den meisten Premium-Themes 2025+ — ist DfDarkMode sofort kompatibel: installieren, aktivieren, es funktioniert. Falls Ihr Theme noch keine Dunkel-Styles hat, können Sie native Bootstrap-Variablen (--bs-body-bg, --bs-body-color usw.) nutzen oder eigene Regeln nach und nach hinzufügen. DfDarkMode berührt Ihr CSS nicht.
Saubere, standardkonforme Shopware-Architektur
Das Plugin folgt strikt den Shopware-6.7-Konventionen: PSR-4-Autoload unter dem Df/DarkMode-Namespace, Plugin-Klasse mit install / update / uninstall-Lifecycle, Kunden-Custom-Field über das Standard-DAL-Repository erstellt, AJAX-Route per PHP-8-Symfony-Routing-Attributen deklariert, Services per services.xml injiziert, Subscriber an kernel.event_subscriber gebunden. Die Deinstallation respektiert das keepUserData-Flag. Keine benutzerdefinierten Schema-Migrationen erforderlich. Klartext-Quellcode, MIT-lizenziert, prüfbar.
Anpassung und JS-Event für Integrationen
Standardmäßig wird der Toggle im Block base_header_actions_wishlist des Base-Layouts eingebettet. Um ihn zu verschieben, überschreiben Sie einfach base.html.twig und platzieren Sie das dark-mode-toggle-Komponenten-Include in einem anderen Block (Suche, Konto, Benutzerdefiniert usw.) — vollständiges Beispiel im README. Auf der JS-Seite emittiert das Plugin bei jeder Änderung ein df-dark-mode-changed-Event auf dem Dokument mit event.detail.preference (auto / light / dark) und event.detail.resolvedTheme (berechnetes light / dark). Praktisch zum Synchronisieren einer anderen Komponente (Recharts-Diagramm, externer iframe, Calendly-Embed usw.) mit dem aktuellen Theme.
Es gibt noch keine Rezensionen.