Oxid-Viewklassen erweitern und Daten an Templates schicken


Dem Oxid-Shopsystem liegt ein rein PHP-basiertes Framework zugrunde, bei dessen Erstellung sich die Entwickler streng an das MVC-Architekturmuster (Model View Controller) gehalten haben. Ein Ziel der MVC-Architektur ist es, Softwarekomponenten zu schaffen, die leicht unabhängig voneinander modifiziert aber auch erneuert werden können.


Wer für Oxid programmieren möchte, sollte diese Vorzüge wahren und entsprechende Regeln bei der Umsetzung eigener Modifikationen am Oxid-Shop einhalten.

Alle Änderungen, die Sie an Oxid vornehmen, sollten in eigene Module (Logik) oder Templates (Design) ausgelagert werden. So haben Sie deutlich weniger Aufwand bei einem Update des Oxid-Systems und – sofern ein Supportvertrag besteht – Anspruch auf Unterstützung durch Oxid.

In diesem Beispiel erkläre zeige ich Ihnen, wie Sie ein Modul für eine View-Klasse erstellen und die damit ermittelten Daten ans Template übergeben kommen.

Module sind Erweiterungen für bestehende Kernkomponenten (core) oder View-Klassen (views). Sie können sowohl für den eigentlichen Shop, also den Bereich, den der Besucher sieht, erstellt werden, als auch für den Shop-Admin.

Ein eigenes Modul ist schnell erstellt, jedoch sind ein paar Regeln bei der Erstellung zu beachten.

Moduldateien erstellen

Ein Modul heißt immer so wie die Klasse, die es enthält. Meine neue Datei acki_details.php muss also so beginnen:

class acki_details{
    //Halt! Das geht so noch nicht.
}

Außerdem erweitert diese meine Klasse die vorhandene Oxid-Viewklasse details. Daher muss darin stehen:

acki_details extends acki_details_parent{
    //hier können Methoden stehen
}

Ob meine neuen Module angesprochen werden können, teste ich gerne so:

acki_details extends acki_details_parent{
    public function dummy(){
        return 'OK';
    }
}

Module gehören in ein Unterverzeichnis von /modules. Legen Sie am besten Ihr persönliches Verzeichnis an und gliedern Sie es weiter in /core und /views, abhängig davon, wofür Sie Module erstellen möchten. Die neu erstellte View-Klasse landet bei mir im Verzeichnis /modules/acki/views und heißt acki_details.php.

Ich empfehle außerdem, eigene Module durch ein eigenes Präfix du kennzeichnen, das durch einen Unterstrich vom Klassennamen getrennt wird. So können später mehrere Entwickler eigene Erweiterungen einbringen, ohne einander in die Quere zu kommen.

Das neue Modul registrieren

In meinem Beitrag Systemeinstellungen von Oxid anpassen habe ich mich noch über den Abschnitt Module ausgeschwiegen. Der kommt jetzt ins Spiel.

Über diesen Bereich können Sie von System aus bestehende Klassen – sowohl mit ox… beginnende Kernkomponenten als auch Viewklassen mit sprechenden Namen (wie etwa details oder search) um eigene Module erweitern. Das geht in Oxid durch die Verkettung von Modulen, zum Beispiel so, wenn ich meine Erweiterung für die details-Klasse einbinden möchte:

details => acki/views/acki_details

Dabei ist die Original-Viewklasse details bereits eingeschlossen.

Möchte ich ein zweites Modul für die View-Klasse details einbinden, geht das zum Beispiel so:

details => acki/views/acki_details&andere/views/a_details

Bei dieser Angabe werden niemals das Verzeichnis /modules sowie die Dateinamenerweiterung .php angegeben! Im Beispiel gehen wir davon aus, dass sich das Modul im Verzeichnis /modules/acki/views befindet und die Datei acki_details.php heißt.


Ein Modul für eine View-Klasse im Template verwenden

Innerhalb einer View-Klasse können Sie das Objekt $oView verwenden, das sowohl das von Oxid bereitgestellte als auch Ihre eingebundenen Module umfasst. Mit dem Smarty-Code [{$oView->dummy()}] gibt mein Modul beim Test ein „OK“ im Template aus.


Ein Gedanke zu „Oxid-Viewklassen erweitern und Daten an Templates schicken

  1. Pingback: Neue Funktionen/Methoden für Objekte erstellen | Ackis Oxid-Blog

Kommentare sind geschlossen.