Methoden können nicht überschrieben werden?

Hallo,

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?

Hallo dsentker,

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.

Hast Du das Problem lösen können?

Grüße
floko

Browsercache geleert?

[QUOTE=MBa;58073]Browsercache geleert?[/QUOTE]

Auch den habe ich gerade mal gelöscht, vor allem aber natürlich den Inhalt des tmp-Ordners.
Ändert leider nichts…

Ist für oxbasket evtl. schon ein anderes Modul definiert?

@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.

Allerdings wird in keinem der beiden anderen Module die Funktion calculateBasket() angefasst.

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!

Für jede Klasse darf es nur einen Eintrag geben.

Mehrere Module werden durch & getrennt

[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”.

Ich werfe auch mal was in den Raum: Mal die Session gelöscht?

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.

Schöne Grüße

Der Warenkorb wird in den cookies gespeichert.

[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.