OXID eShop Modulentwicklung: Best Practices & Beispiele
Der OXID eShop gehört zu den etablierten E-Commerce-Plattformen im deutschsprachigen Raum und zeichnet sich durch seine Flexibilität und Erweiterbarkeit aus. Für Entwickler und Agenturen, die individuelle Anforderungen umsetzen wollen, eröffnet die Modulentwicklung im OXID eShop enorme Möglichkeiten. In diesem Artikel zeigen wir praxisnahe Best Practices, konkrete Umsetzungsbeispiele und wichtige Tipps, wie Sie eigene Module effizient und wartbar entwickeln.
Grundlagen der OXID Modulstruktur
Die Architektur des OXID eShops basiert auf dem MVC-Prinzip und bietet eine modulare Erweiterung über eigene Klassen und Templates. Ein Modul kann bestehende Klassen überladen oder durch Events und Hooks erweitern. Der Einstiegspunkt für jedes Modul ist die metadata.php, in der essentielle Konfigurationen wie Modul-Name, Version, author, verwendete Klassen und Dateien definiert werden.
Damit ein Modul korrekt funktioniert, sollte die metadata.php
klar strukturiert, valide und dokumentiert sein. Achten Sie darauf, Namespacing zu verwenden und eigene Extensions sauber im Modulverzeichnis unterzubringen (/modules/[vendor]/[modulename]/
), um eine langfristige Wartbarkeit sicherzustellen.
Namensräume und Autoloading richtig einsetzen
Verwenden Sie PSR-4-konformes Autoloading, um Ihre Klassen automatisch laden zu lassen. Dies vereinfacht nicht nur die Integration externer Bibliotheken, sondern vermeidet auch Naming-Konflikte. Die Konfiguration erfolgt direkt über die metadata.php mit dem Schlüssel autoload
.
Beispiel:
'autoload' => [
'psr-4' => [
'Vendor\\ModulName\\' => './src'
]
]
Dadurch befinden sich Ihre Model-, Controller- und Helper-Klassen logisch gegliedert unter src
und sind klar vom übrigen Shopsystem getrennt.
Templates erweitern und überschreiben
Im Rahmen der OXID Theme-Anpassung kommt es häufig vor, dass Templates modifiziert oder durch eigene ersetzt werden sollen. Statt bestehende Templates direkt zu überschreiben, ist es best practice, eigene Blocks zu definieren oder bestehende durch Template-Blöcke zu ergänzen. Dies ermöglicht Update-Kompatibilität und vermeidet Konflikte mit Drittmodulen.
Die Definition erfolgt ebenfalls in der metadata.php:
'templates' => [
'mytemplate.tpl' => 'vendor/modulename/views/admin/mytemplate.tpl'
],
'blocks' => [
[
'template' => 'page/details/inc/productmain.tpl',
'block' => 'details_productmain_longdesc',
'file' => '/views/blocks/longdesc_extension.tpl'
]
]
Besonders in der OXID CE, PE und EE Version ist dies der empfohlene Weg, da sich die Templating-Engine Smarty ansonsten nicht korrekt aktualisiert.
Datenbankmigrationen sauber integrieren
Ein häufig vernachlässigter Aspekt bei der OXID-Modulentwicklung ist die saubere Integration von Datenbankmigrationen. Gerade bei umfangreichen Erweiterungen ist es wichtig, Tabellen, Felder oder Views gezielt und migrationssicher anzulegen.
Verwenden Sie dafür die Aktivierungs- und Deaktivierungsroutinen, die über die Moduleinstellungen zur Verfügung stehen. Beachten Sie, dass Änderungen an der Datenbank rückbaubar sein sollten. Mit Tools wie Doctrine Migrations oder einfachen SQL-Skripten innerhalb von Modulmethoden kann das zuverlässig umgesetzt werden.
OXID Events nutzen für flexibles Customizing
Ein besonders eleganter Weg, in bestehende Shoplogiken einzugreifen, ist die Nutzung von OXID Events wie onActivate
und onDeactivate
. Über diese können Skripte, Cache-Resets oder Konfigurationswerte beim Aktivieren oder Deaktivieren eines Moduls automatisiert ausgeführt werden. Das reduziert manuelle Schritte und erhöht die Stabilität im Deployment-Prozess.
Testbarkeit und Qualitätssicherung
Eine professionelle OXID-Modulentwicklung erfordert systematische Tests. Nutzen Sie PHPUnit für Unit- und Integrationstests, um die Funktionsweise neuer Features zu validieren. Auch Static Code Analysis Tools wie PHPStan oder PHP_CodeSniffer helfen dabei, Fehlerquellen frühzeitig zu erkennen und den Code sauber zu halten.
Zudem sollte jedes Modul dokumentiert werden – sowohl intern im Code über DocBlocks als auch über eine README.md, damit es von anderen Entwicklern oder dem Kunden gewartet und verstanden werden kann.
Praxisbeispiel: Modulerweiterung für kundenindividuelle Preise
Ein häufiges Szenario im B2B-Bereich: kundenindividuelle Preisregeln. Dabei werden zusätzliche Preisfelder (z. B. Staffelpreise je Kundengruppe) integriert und bei der Preisberechnung dynamisch berücksichtigt.
Best Practice ist hier die Erweiterung der oxArticle
– und oxBasketItem
-Klassen über Modulextensions. Zusätzlich sollte eine eigene Datenbanktabelle gepflegt und über ein Admin-Modul konfigurierbar gemacht werden. Templates im Frontend werden über Blöcke erweitert, sodass Preise dynamisch und individuell dargestellt werden.
Solche Module müssen besonders robust gegenüber Shop-Updates sein, weshalb umfassende Tests und eine saubere Kapselung des eigenen Codes entscheidend sind.
Wartbarkeit und Updatefähigkeit sicherstellen
Ein nachhaltiges Modul ist nicht nur funktional, sondern auch zukunftssicher. Vermeiden Sie hartcodierte Pfade, direkte Datenbankabfragen auf Core-Tabellen oder das Überschreiben von Templates oder Views im Core. Nutzen Sie stattdessen Schnittstellen, Events und Template-Blöcke.
Dokumentieren Sie jede Moduländerung und führen Sie ein Changelog. Achten Sie bei der Nutzung von OXID-eigenen Logiken auf Versionsunterschiede – besonders beim Einsatz von OXID 6.x oder höher, bei dem Composer eine zentrale Rolle spielt.
Composer-Einsatz in OXID-Modulen
Ab Version 6 ermöglicht der OXID eShop die Integration von Modulen via Composer. Dies erlaubt nicht nur eine saubere Paketierung, sondern auch eine automatische Verwaltung von Abhängigkeiten. Definieren Sie Abhängigkeiten direkt in der composer.json
Ihres Moduls und veröffentlichen Sie das Paket optional auf Packagist oder in einem privaten Repository.
Damit lassen sich Module einfacher deployen, updaten und in CI/CD-Pipelines integrieren – ein klarer Vorteil für professionelle Projekte.
Jetzt durchstarten mit professioneller Modulentwicklung
Die Entwicklung individueller OXID-Module bietet enormes Potenzial, um sowohl Kundenbedürfnisse als auch geschäftskritische Anforderungen exakt umzusetzen. Mit den hier vorgestellten Best Practices und Beispielen erhalten Sie eine stabile Basis für leistungsstarke Erweiterungen.
Wenn Sie Unterstützung bei der OXID-Modulentwicklung, der Optimierung bestehender Module oder bei der Integration komplexer B2B-Anforderungen benötigen – sprechen Sie uns gerne an. Wir helfen Ihnen auch bei Themen wie Performance-Tuning, Template-Anpassungen oder Automatisierungen mit OXID-Modulen. Kontaktieren Sie uns jetzt unverbindlich und profitieren Sie von unserer langjährigen Erfahrung im OXID-Umfeld.

Hi, ich bin Matthias Eggert – seit über 17 Jahren im Online-Marketing unterwegs und mit jeder Menge Leidenschaft dabei. Seit 2013 bin ich bei der DIXENO GmbH, wo ich über viele Jahre als Head of Marketing gearbeitet habe. Anfang 2025 durfte ich dann in die Geschäftsleitung wechseln – ein spannender Schritt, der mir noch mehr Raum gibt, Dinge zu bewegen.
Ich liebe es, Strategien zu entwickeln, Tools clever einzusetzen und mit modernen Technologien wie KI und Marketing-Automation echte Mehrwerte zu schaffen. Dabei geht es für mich nie nur um Einzelmaßnahmen – sondern um das große Ganze.
Mein Fokus liegt auf einem ganzheitlichen Verständnis von E-Commerce. Ich denke nicht nur in Kampagnen, sondern auch in Prozessen und Systemen: ERP, CRM, PIM, Shopsysteme – all das gehört für mich genauso dazu wie SEO, Webanalyse und Content-Marketing. Denn nur wenn alles sauber zusammenspielt, entsteht nachhaltiger Erfolg.
Ich begleite Unternehmen von der Strategie über die technische Umsetzung bis hin zur Optimierung im Detail – und das am liebsten auf Augenhöhe.
Wenn du also jemanden suchst, der Online-Marketing mit E-Commerce-Kompetenz verbindet und dabei nicht in Silos denkt: Lass uns sprechen!