OXID Community Forum

> German forum > Entwickler > Problem mit überladener Methode
Login
FAQ Members List Calendar Search Today's Posts Mark Forums Read

Thread: Problem mit überladener Methode


Reply
 
Thread Tools Search this Thread Display Modes
#Top   #1  
Old 05-13-2017, 10:52 AM
Pauleo77 Pauleo77 is offline
Member
Join Date: Jan 2017
Posts: 40
Pauleo77 is on a distinguished road
Default 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:
Code:
$productCat = $oArticle->getCategory();
.

Beim Zugriff auf die Kategorie des Artikels erhalte ich in der exception_log.txt die folgende Fehlermeldung:
Quote:
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!
__________________
Oxid CE 4.10.3

Last edited by Pauleo77; 05-13-2017 at 11:25 AM.
Reply With Quote
#Top   #2  
Old 05-13-2017, 11:29 AM
vanilla thunder's Avatar
vanilla thunder vanilla thunder is online now
Marco's Sidekick
Join Date: Nov 2010
Posts: 6,447
vanilla thunder is on a distinguished road
Default Re: Problem mit überladener Methode

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.
Reply With Quote
#Top   #3  
Old 05-13-2017, 12:36 PM
foxido.de foxido.de is offline
Senior Member
Join Date: Jul 2013
Posts: 1,129
foxido.de is on a distinguished road
Default Re: Problem mit überladener Methode

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:

Code:
$oProduct = oxNew('oxArticle');
$oProduct->load($oBasketItem->getProductId());
$productCat = $oProduct->getCategory();
oder etwas in der Form:

Code:
if (!$this->isAdmin())...
__________________
Grüße

http://www.foxido.de/

- Modulentwicklung, Komplette Systeme, Beratung, Service

Tel: 02841-9161670

Deep-AutoSuggest, der neue Finder 4.6x 4.10.x und 90 weitere Module
Reply With Quote
#Top   #4  
Old 05-13-2017, 09:17 PM
Pauleo77 Pauleo77 is offline
Member
Join Date: Jan 2017
Posts: 40
Pauleo77 is on a distinguished road
Default AW: Problem mit überladener Methode

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

Da mein Modul nur im Frontend (Warenkorb) gilt, konnte ich den entsprechenden Block im Backend einfach mit dem Statement
Code:
if (!$this->isAdmin())
ausklammern.
__________________
Oxid CE 4.10.3

Last edited by Pauleo77; 05-13-2017 at 09:40 PM.
Reply With Quote
Reply

Bookmarks

Tags
klasse, methode, problem, überladener

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Nicht Sichtbar
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Filter für die Methode getVariantSelections spezifizieren bholiand Entwickler 3 11-22-2014 07:22 AM
Modulerstellung: Methode zur Klasse hinzufügen p4w3L Module 7 10-14-2011 01:56 PM
Methode Save erweitern may17 Entwickler 1 09-17-2010 03:05 PM
Bug in der Methode getPictureGallery? (V4.1.6) nullzehn Entwickler 1 02-16-2010 09:40 PM

All times are GMT +1. The time now is 03:35 PM.