OXID eShop Modulentwicklung Teil 3: Best Practices & Beispiele für nachhaltige Erweiterungen
Die Entwicklung von Modulen im OXID eShop bietet eine leistungsstarke Möglichkeit, individuelle Anforderungen innerhalb einer stabilen Shoparchitektur umzusetzen. Nachdem wir uns im ersten Teil unserer Serie den Grundlagen und im zweiten Teil der technischen Umsetzung gewidmet haben, konzentrieren wir uns nun auf Best Practices und praktische Beispiele, um nachhaltige und wartbare Module für OXID zu entwickeln.
Struktur und Lesbarkeit sind entscheidend
Ein essenzieller Aspekt professioneller Module ist eine saubere und nachvollziehbare Projektstruktur. Dies beginnt bei einer klaren Dateistruktur im Modulverzeichnis – getrennt nach Models, Controllern, Services und Templates. Entwickler sollten sich strikt an die Namenskonventionen von OXID halten und phpPSR-konforme Klassen einsetzen.
Dokumentation, sowohl im Code als auch als README im Modulverzeichnis, erhöht die Wartbarkeit und erleichtert zukünftige Erweiterungen. Verwenden Sie verständliche Kommentare und erläutern Sie komplexe Prozesse, wie z. B. spezielle Hooks oder Eventlistener, die angesprochen werden.
Verwendung von Services und Dependency Injection
Ein moderner Ansatz in der OXID Modulentwicklung ist der Einsatz von Dependency Injection (DI). Dies ermöglicht eine bessere Testbarkeit und verhindert enge Kopplungen innerhalb der Geschäftslogik. Logiklastige Prozesse sollten vom Controller getrennt und in eigene Services ausgelagert werden. Der DI-Container von OXID (seit v6.x) unterstützt PHP-DI, wodurch Services automatisch injiziert werden können.
Modulmetadata intelligent verwenden
Die Datei metadata.php
ist das Herzstück eines Moduls. Neben der Standardkonfiguration für Templates, Blöcke, Einstellungen und Erweiterungen kann sie verwenden werden, um Events wie onActivate
oder onDeactivate
korrekt zu definieren. Vermeiden Sie dabei direkte Datenbankoperationen und setzen Sie stattdessen auf Repository-Klassen oder Migrationen.
Beispiel:
'events' => [
'onActivate' => '\Vendor\MyModule\Core\ModuleInstaller::onActivate',
'onDeactivate' => '\Vendor\MyModule\Core\ModuleInstaller::onDeactivate'
]
Diese Trennung erlaubt ein elegantes Handling von Aktivierungen und Deaktivierungen, etwa für das Anlegen von Konfigurationswerten oder der Initialisierung von benötigten Ressourcen.
Refactoring und technisches Schuldenmanagement
Im Alltag vieler Agenturen entstehen zunächst funktionsfähige, aber nicht immer optimal strukturierte Erweiterungen. Um technische Schulden zu vermeiden, sollten sich Entwickler mit Refactoring-Strategien auskennen. Besonders hilfreich ist der Einsatz automatisierter Test-Tools wie PHPUnit in Kombination mit OXID Testing Library.
Verwenden Sie bei der Erweiterung von Core-Klassen modulare Überladungen statt direkter Änderungen im Core. So bleibt Ihr Shop updatefähig. Nutzen Sie dafür die extend
-Direktive in der metadata.php und vermeiden Sie überschneidende Modifikationen mit anderen Modulen durch gezieltes Event-Hooking oder Service Templating.
Datenbankzugriffe kapseln
Ein häufiger Fehler in selbst entwickelten OXID-Modulen ist der direkte Zugriff auf die Datenbank via Raw SQL oder Nutzung von oxDb::getDb()
. Empfehlenswerter ist der Aufbau eigener Repository-Klassen, die auf der \OxidEsales\Eshop\Core\Model\BaseModel
Struktur basieren.
Vorteile:
- Wartbarkeit durch zentrale Datenzugriffslogik
- Bessere Unit-Testbarkeit
- Einfachere Anpassung auf zukünftige Datenbankänderungen
Beispiel für eine Repository-Klasse
namespace Vendor\MyModule\Repository;
use OxidEsales\Eshop\Core\Model\ListModel;
class CustomArticleList extends ListModel
{
protected $_sObjectsInListName = \OxidEsales\Eshop\Application\Model\Article::class;
public function loadCustomArticles()
{
$sSelect = 'SELECT oxid FROM oxarticles WHERE oxstock > 0 AND oxactive = 1';
$this->selectString($sSelect);
return $this;
}
}
Modultests und Qualitätssicherung
Qualitativ hochwertige Module sollten stets getestet sein. Das Ziel sind automatisierte Tests auf Unit- und Integrationsebene. Die OXID Testing Library ermöglicht ein sauberes Setup für PHPUnit-basierte Tests. Zusätzlich empfiehlt sich statisches Code-Analyzing mit Tools wie PHPStan oder Psalm.
Praxisbeispiel: Wunschzettel-Funktion als Modul
Ein häufig nachgefragtes Feature im E-Commerce ist die Wunschzettel-Funktion. Als OXID-Modul kann sie elegant über ein eigenes Template, einen Controller und ein erweitertes User-Model integriert werden. Die Logik für das Speichern und Auslesen der Wunschprodukte wird über ein separates Modell gehandhabt. Die Ausgabe erfolgt über ein Template-Block, das nahtlos in den Warenkorb integriert ist.
Dabei sollte auf Performance geachtet werden: statt komplexer JOINs empfehlen sich entsprechende Relations und ggf. eigene Tabellen mit schlanker Index-Struktur.
Versionierung und Deployment von Modulen
Ein weiterer Aspekt wartbarer Modularchitektur ist die Versionierung. Nutzen Sie für Ihre Projekte immer Git mit semantischer Versionierung – beispielsweise v1.0.0 für initiale Releases. Für den produktiven Einsatz ist ein Deployment über Composer und ein eigenes Repository wie packagist.org
oder private Artefaktserver best practice.
Composer bietet außerdem das Mapping der Modulverzeichnisse via oxid-esales/oxideshop-metapackage-ce
, sodass Module bequem mit dem Shopsystem gekoppelt werden können:
"require": {
"vendor/mymodule": "^1.0"
}
Support für verschiedene OXID-Versionen
Viele Module sollen über mehrere Shopversionen hinweg funktionieren. Deshalb ist es wichtig, Kompatibilitäten regelmäßig zu prüfen, z. B. durch Test-Shops für die jeweiligen Versionen von OXID eShop 6.1 bis 6.5+. Nutzen Sie beim Codieren abstrahierte Helferklassen, Versionserkennungen (z.B. via Registry::getConfig()->getVersion()
) und strukturierte Release-Notes.
Sie planen, ein OXID eShop Modul zu entwickeln oder ein bestehendes Modul zu optimieren? Gerne unterstützen wir Sie bei Themen wie modulare Shoparchitekturen, Composer-basierte Deployment-Strategien, Performance-Tuning oder Testautomatisierung für Ihre OXID-Projekte. Unser Entwicklerteam verfügt über langjährige Erfahrung in der Entwicklung komplexer Erweiterungen innerhalb des OXID-Ökosystems. Kontaktieren Sie uns – wir beraten Sie gerne individuell und auf Expertenniveau.

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!