Probleme mit dem Vererben von Klassen im Oxid Framework


#1

Immer wenn ich meine ich hätte das Konzept von OXID verstanden und in Modulen Klassen oder Methoden überschreibe, scheitere ich wieder. Mir ist immer noch nicht ganz klar, wann ich in welchem Controller welche Objekte zur Verfügung habe bzw. sie mir verfügbar machen kann.

In dem unten gezeigten Beispiel möchte ich die Methode _sendOrderByEmail der Klasse oxOrder so erweitern, dass ich eine Bestellbestägigung nicht nur an den User und Shopowner versende, sondern auch an den Hersteller (die von mir erweiterten Hersteller-Daten muss ich mich mir dann halt noch holen). Ich scheitere aber schon daran, dass das Überschreiben der Methode fehlschlägt.

Über die metadata.php definiere ich meine eigene Order Klasse:
‘oxorder’ => ‘modul/models/custom_oxorder’,

in der dann einfache nur die Methode der vererbenden Klasse durchreiche.

<?php class custom_oxorder extends custom_oxorder_parent { protected function _sendOrderByEmail($oUser = null, $oBasket = null, $oPayment = null) { parent::_sendOrderByEmail( null, null, null ); } }

$oUser, $oBasket, $oPayment werden dann ja erst in der Methode _sendOrderByEmail der Elternklasse Order mit Daten gefüllt:
// add user, basket and payment to order
$this->_oUser = $oUser;
$this->_oBasket = $oBasket;
$this->_oPayment = $oPayment;

Trotzdem bekomme ich beim Abschluss des Checkouts den Fehler, dass $oBasket null sei und die Order nicht abgeschlossen werden kann. Oder müsste ich hier tatsächlich die die Objekte $oUser, $oBasket, $oPayment und nicht null übergeben? Ich bin aber davon ausgegangen, dass ich hier nur den Teil ergänzen müsste, der ich der Methode hinzufügen möchte.

Leider scheitere ich immer wieder an solchen Fragen. Ich suche noch nach einer Doku, in der beschrieben wird, wie im Oxid Framework an beliebiger Stelle Klassen vererbt und Objekte verfügbar gemacht werden können. Vielleicht hat da ja jemand einen Tipp für mich. Dabei suche ich nicht die Umsetzung eines konkreten Beispiels (wie im Kochbuch), sondern eine grundlegende Erklärung, mit der ich die Umsetzung der eigenen Ideen herleiten kann. Das Konzept verdichtet und eingedampft auf wenige Seiten. Vielleicht gibt’s da ja was.


#2

Hallo,

Punkt 1:

Warum …“null, null, null”? Dann ist $oBasket auch “null”, " $this->_oBasket" ebenso.
Versuche es mal so:

parent::_sendOrderByEmail($oUser, $oBasket, $oPayment);

Punkt 2:

Warum nicht gleich oxemail erweitern und in der Funktion “sendOrderEmailToOwner” mit AddCC die Lieferantenadresse hinzufügen?


#3

Vielen Dank für die Anwort.

Weil die Methode der Elternklasse auch mit
_sendOrderByEmail($oUser = null, $oBasket = null, $oPayment = null)
aufgerufen wird. Wenn ich das anders mache, bekomme ich die Fehlermeldung, dass der Aufruf gleich wie in der Elternklasse sein muss. Habe diese nur leider nicht zur Hand, da ich nur abends Zeit habe.

Aber es geht mir hier auch nur um ein Beispiel. Ich würde das Framework gerne so verstehen, dass ich selbst auf die Idee unter Punkt 2 komme, wo also der sinnvollste Ansatz für eigene Erweiterungen ist. das fehlt mir leider noch.

Templating und Frontendcontroller erweitern ist kein Problem, aber das Framework für eigene Ideen zu nutzen, da fehlt mir der Einstieg :slight_smile:


#4

Habe meine 6, 7 Module soweit fertig und OXID meinen Wünschen angepasst. Trotzdem bleibt immer das Gefühl, dass es elegantere Lösungen gegeben hätte.
Aber gut, diese Sicherheit wird sich im Laufe der Zeit hoffentlich noch einstellen. :slight_smile:


#5

Das kannst Du wohl erst dann los werden, wenn Du den Code dieser 6, 7 Module mit anderen teilst :wink: