ich arbeite derzeit an meinem ersten Modul und weiss nicht weiter. Ziel ist es, die Methode [B]getFPrice()[/B] in der Core-Klasse oxBasket zu überschreiben, so dass ein anderer (modifizierter Wert) zurückgeliefert wird.
In meinem Modulordner befindet sich ein weiterer Ordner “creditpoints”, in diesem liegt die Datei [I]extendedoxbasket.php[/I], die so aussieht:
<?php
class extendedoxbasket extends extendedoxbasket_parent {
public function getFPrice()
{
$iDiscount = ((int)$this->getUser()->getCreditPoints()) * 5;
return oxLang::getInstance()->formatCurrency( $this->getPrice()->getBruttoPrice() - $iDiscount, $this->getBasketCurrency() );
}
}
?>
(Dazu muss ich sagen, dass ich die Methode “getCreditPoints” selbst als Modul erstellt habe, was problemlos funktioniert).
Dann noch im Adminbereich das Modul eingetragen, also so:
oxbasket => creditpoints/extendedoxbasket
und erwartet dass mein Gesamtpreis im Warenkorb nun verändert ausgegeben wird. Doch das ist nicht der Fall, die Methode wird gar nicht angesprochen.
Wenn ich die Methode der Core-Klasse direkt ändere, dann funktioniert es. Wo habe ich etwas vergessen? Oder können bestimmte Methoden nicht überschrieben werden?
habe gerade vom Prinzip her dasselbe Problem:
Versuche gerade die Funktion calculateBasket() aus core/oxbasket.php mit einem eigenen Modul zu überschreiben.
Formal scheint auch alles zu stimmen (wie bei einem weiteren Modul, das ich bereits für oxbasket angelegt habe); dennoch wird nicht die neue Funktion aufgerufen, sondern die originale, wie ich per error_log getestet habe.
Nachtrag:
Hab jetzt mal versuchsweise die Funktion aus meinem neuen, dritten Modul in das erste Modul gepackt.
Hier wird sie erfolgreich aufgerufen und überschreibt die Original-Funktion.
Diese Lösung macht mich zwar nicht glücklich, weil ich die unterschiedlichen Module in verschiedenen Shops mal brauche, mal nicht brauche und daher eine saubere Trennung nach Funktion bevorzugen würde. Aber als Workaround geht es.
[QUOTE=floko;58084]@avenger
Ja, dieses hier ist sogar das dritte Modul, das per & im Backend für oxbasket angehängt wurde. Die beiden ersten funktionieren auch klaglos.[/QUOTE]
Dann ist Deine Moduldefinition falsch!
[QUOTE=avenger;58094]Dann ist Deine Moduldefinition falsch![/QUOTE]
Kann ich nicht ausschließen, allerdings habe ich alles gehandhabt wie bei den anderen beiden Modulen auch.
[QUOTE=avenger;58094]Für jede Klasse darf es nur einen Eintrag geben.[/QUOTE]
Sicher, meine Module haben deshalb ja auch abweichende Klassennamen.
[QUOTE=avenger;58094]Mehrere Module werden durch & getrennt[/QUOTE]
Klar, wie gesagt “per & im Backend für oxbasket angehängt”.
Auch bei mir wurde das Modul einfach nicht verwendet, obwohl alles korrekt eingetragen war im Admin, das compile-dir geleert und sogar der server neu gestartet war.
Bei mir hats tatsächlich geholfen den browsercache zu löschen.
Warum das funktioniert hat will mir aber nicht einleuchten.
[QUOTE=liberavia;59254]
Bei mir hats tatsächlich geholfen den browsercache zu löschen.
Warum das funktioniert hat will mir aber nicht einleuchten.
[/QUOTE]
Genau weiß ich das auch nicht.
Ich vermute, dass das komplette oxBasket-Objekt gecached und anhand der Session-Id, welche in den cookies steht identifiziert wird.