Problem mit überladener Methode

Hallo zusammen,

um die Preiskalkulation im Warenkorb anzupassen, habe ich die Methode _calcItemsPrice() der Klasse oxBasket in einem eigenen Modul überladen.
Im Warenkorb funktioniert das Ganze einwandfrei.

Im Adminbereich unter “Bestellungen” habe ich jedoch mit der überladenen Methode zwei Probleme.

  1. Der Karteikartenreiter “Stamm” funktioniert nicht mehr. Hier erscheint beim Anklicken die Startseite des Shops.
  2. In dem Karteikartenreiter “Artikel” wird der Preis nicht mehr aktualisiert, wenn ich die Artikelanzahl ändere.

OXID scheint die Methode _calcItemsPrice() im Warenkorb und im Adminbereich unterschiedlich zu behandeln. Im Warenkorb funktioniert der Aufruf der überladenen Methode, im Adminbereich gibt es Probleme beim Aufruf der überladenen Methode.

Konkret macht die folgende Codezeile in meiner überladenen Methode Ärger:

$productCat = $oArticle->getCategory();

.

Beim Zugriff auf die Kategorie des Artikels erhalte ich in der exception_log.txt die folgende Fehlermeldung:

oxSystemComponentException-oxException (time: 2017-05-13 11:47:01): [0]: Function ‘getCategory’ does not exist or is not accessible! (oxOrderArticle)

Stack Trace: #0 /opt/lampp/htdocs/oxid/modules/custom/staffelpreise/staffelpreise.php(56): oxSuperCfg->__call(‘getCategory’, Array)
#1 /opt/lampp/htdocs/oxid/modules/custom/staffelpreise/staffelpreise.php(56): oxOrderArticle->getCategory()
#2 /opt/lampp/htdocs/oxid/application/models/oxbasket.php(1470): staffelpreise->_calcItemsPrice()
#3 /opt/lampp/htdocs/oxid/application/models/oxorder.php(1622): oxBasket->calculateBasket(true)
#4 /opt/lampp/htdocs/oxid/application/controllers/admin/order_main.php(72): oxOrder->getShippingSetList()
#5 /opt/lampp/htdocs/oxid/core/oxshopcontrol.php(479): Order_Main->render()
#6 /opt/lampp/htdocs/oxid/core/oxshopcontrol.php(361): oxShopControl->_render(Object(Order_Main))
#7 /opt/lampp/htdocs/oxid/core/oxshopcontrol.php(126): oxShopControl->_process(‘order_main’, NULL, NULL, NULL)
#8 /opt/lampp/htdocs/oxid/core/oxid.php(40): oxShopControl->start()
#9 /opt/lampp/htdocs/oxid/index.php(26): OXID::run()
#10 /opt/lampp/htdocs/oxid/admin/index.php(27): require_once(‘/opt/lampp/htdo…’)
#11 {main}

Faulty component –>

Hat jemand eine Idee, wo das Problem liegen könnte?

Viele Grüße und besten Dank!

Im Frontend, also im Warenkorb, ist $oArticle ein oxArticle Objekt, im backend bekommst du dagegen ein oxOrderArticle Objekt, das diese Funktion nicht mehr hat.
Schau dir mal die Funktion getArticle in oxBasketItem an.

Einen Fehler dürfte es eigentlich nicht geben, die Ausgabe sollte nur leer sein. Wenn das auch im Admin benötigt wird, nimmst einen Umweg:

$oProduct = oxNew('oxArticle');
$oProduct->load($oBasketItem->getProductId());
$productCat = $oProduct->getCategory();

oder etwas in der Form:

if (!$this->isAdmin())...

Wie immer vielen Dank für die kompetente Unterstützung!
Dank Eurer Hinweise konnte ich das Problem lösen und habe wieder etwas dazugelernt. :slight_smile:

Da mein Modul nur im Frontend (Warenkorb) gilt, konnte ich den entsprechenden Block im Backend einfach mit dem Statement

if (!$this->isAdmin())

ausklammern.