Hallo Community,
ich stoße immer wieder auf das gleiche Problem.
Ich habe 2 Module, welche die gleiche Klasse vererbt bekommen und die gleiche Funktion ansteuern sollen.
Wenn ich nun beide Aktiviert habe, geht immer nur einer der beiden Funktionen
Metadata beider Dateien
'extend' => array(
''oxorderarticle' => pathToClass/name.php
....
Klassenbildung beider Dateien
class classname extend classname_parent {
function xyz (){
// hier arbeitet die function
parent::xyz();
}
}
Wo liegt das Problem. Gibt es keine Möglichkeit durch mehrere Module eine Klasse zu extenden?
Danke schonmal
Lg Chris
Das geht schon, nur da hast irgendwo einen Fehler eingebaut.
Versuch mal “.php” aus deiner metadata Anweisung zu entfernen
Ich habe jetzt herausgefunden, das wenn ich 2 mal den Extend ausführe, ich in einer der funktion ein parent::xys ausführen muss.
Je nach
Aaufrufreihenfolge. aber ist das nicht sehr unflexibel?
du musst grundsätzlich parent::function() aufrufen,
könnte ja sein, dass noch ein anderes Modul die selbe Funktion erweitern möchte.
Hey Vanilla,
das .php hab ich garnicht drin stehn 
Das hab ich hier im Forum nur ausversehen hinzugefügt.
Ich hab das Problem in letzter Zeit irgendwie öfters mal 
[QUOTE=vanilla thunder;159060]du musst grundsätzlich parent::function() aufrufen,
könnte ja sein, dass noch ein anderes Modul die selbe Funktion erweitern möchte.[/QUOTE]
Wenn ich das in beiden Modulen mache, erhalte ich einen Fehler.
Die Funktion besitzt die parent klasse nicht (indem falle oxorderarticle)
Das ist ja genau das Problem, was mich grad zur Verzweiflung bringt.
Um es Bildlich zu zeigen, was ich probiert habe, und was beides NICHT geklappt hat 
Aber du rufst doch nirgendswo parent::deineFunktion() auf.
Irgendwie steh ich heute auf dem Schlauch. Das Problem ist mir immer mal unter gekommen, hat sich aber irgendwie von alleine erledigt. Aber heute sehe ich wahrscheinlich den Wald vor lauter Bäumen nicht.
na sicher tue ich das.
Hast du den Quelltext überhaupt angeschaut?
if(method_exists(get_parent_class(__CLASS__),__FUNCTION__) && parent::_getTinyCustConfig()) $aConfig = array_merge( $aConfig, [b]parent::_getTinyCustConfig()[/b] );
Also ich habe Version 2 (aus dem einen Anhang) noch mal probiert…
Ich komme in der einen Klasse in die stornoorder(); aber die andere wird einfach nicht angestoßen 
Hier mal der Quelltext
Das wird angestoßen
class ms_order_overview extends ms_order_overview_parent{
/**
* storno complete order
*/
public function stornoorder(){
$soxId = $this->getEditObjectId();
$oOrder = oxNew("oxOrder");
if ($soxId != "-1" && isset($soxId)) {
// load object
$oOrder->load($soxId);
$oOrder->cancelOrder();
}
// parent::stornoorder();
}
}
Das nicht
class ms_amazon_order_overview extends ms_amazon_order_overview_parent {
public function stornoorder(){
/// HIER STEHT QUELLTEXT
// parent::stornoorder();
}
}
Wenn ich jetzt bei beiden den parent::stornoorder() wieder entkommentiere. Erhalte ich eine Exception - Fehlende Funktion im Template
- Function ‘stornoorder’ does not exist or is not accessible! (ms_order_overview)
Eingebunden sind beide Files in der Metadata wie folgt:
'extend' => array( 'order_overview' => 'ms_orders/ms_ordermanagement/controllers/admin/ms_order_overview',
),
'extend' => array(
'order_overview' => 'ms_amazon/controllers/admin/ms_amazon_order_overview',
),
Bin verzweifelt.
[QUOTE=vanilla thunder;159068]na sicher tue ich das.
Hast du den Quelltext überhaupt angeschaut?
if(method_exists(get_parent_class(__CLASS__),__FUNCTION__) && parent::_getTinyCustConfig()) $aConfig = array_merge( $aConfig, [b]parent::_getTinyCustConfig()[/b] );
[/QUOTE]
Ja Sorry - du hast recht. Das ist voll untergegangen, das es die gleiche Klasse aufruft 
Das Problem macht den Kopf schwer 
du kannst eine Funktion über parent::xyz() nur dann aufrufen, wenn die parent class diese Funktion auch hat.
Und wenn es diese dort eben nicht gibt, gibts den Fehler, den du bekommst.
Deswegen prüfe ich in meinem code Beispiel zuerst ob die parent class diese Funktion hat, und nur wenn es zutrifft, rufe ich diese auf. Das mache ich in beiden Modulen und muss mir keine Gedanken über die Reihenfolge, in der die Module aktiviert wurden, keine Sorgen machen.
[QUOTE=vanilla thunder;159071]du kannst eine Funktion über parent::xyz() nur dann aufrufen, wenn die parent class diese Funktion auch hat.
Und wenn es diese dort eben nicht gibt, gibts den Fehler, den du bekommst.
Deswegen prüfe ich in meinem code Beispiel zuerst ob die parent class diese Funktion hat, und nur wenn es zutrifft, rufe ich diese auf. Das mache ich in beiden Modulen und muss mir keine Gedanken über die Reihenfolge, in der die Module aktiviert wurden, keine Sorgen machen.[/QUOTE]
Hey danke dir!
Ich hab das jetzt mal eingebaut. Klappt alles.
Manchmal sieht man eben den Wald vor lauter bäumen nicht 