Call to a member function getPrice() on null

Hi,

Ich habe einen seltsamen error, den ich nicht lokalisieren kann.

Un zwar habe ich in meinem Test system den paypal express button vom oe/oepaypal modul eingebunden.
Im Warenkorb habe ich eine custom Funktion die einen Service zum Artikel hinzufügt. bzw basierend auf dem Artikel im Warenkorb einen Artikel mit einem kalkulierten Preis.
Im test system funktioniert alles super, doch im live system bekomme ich, immer wenn der Express button angezeigt wird, den folgenden Fehler.
Den Express button habe ich aktuell nur für Admins eingebunden. Sprich, wenn ich nicht eingeloggt bin, kann ich die funktion ohne Probleme verwenden.
evtl. ists wichtig, wenn der Service hinzugefügt wurde, blende ich den Express Button aus.

Fehler:

[30 Oct 08:20:15.662183 2018] [exception] [type Error] [code 0] [file /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Application/Model/BasketItem.php] [line 946] [message Call to a member function getPrice() on null]
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #0 /data/www/www.gripgate.com/oxid6/source/tmp/smarty/418e05c4d750495fee037d66b4f9fa7c^%%BC^BC3^BC329458%%basketcontents_list.tpl.php(187): OxidEsales\EshopCommunity\Application\Model\BasketItem->getFUnitPrice()
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #1 /data/www/www.gripgate.com/oxid6/vendor/smarty/smarty/libs/Smarty.class.php(1876): include('/data/www/www.g...')
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #2 /data/www/www.gripgate.com/oxid6/source/tmp/smarty/418e05c4d750495fee037d66b4f9fa7c^%%57^57E^57E920AC%%basketcontents.tpl.php(34): Smarty->_smarty_include(Array)
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #3 /data/www/www.gripgate.com/oxid6/vendor/smarty/smarty/libs/Smarty.class.php(1876): include('/data/www/www.g...')
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #4 /data/www/www.gripgate.com/oxid6/source/tmp/smarty/418e05c4d750495fee037d66b4f9fa7c^%%52^524^524E7B19%%basket.tpl.php(152): Smarty->_smarty_include(Array)
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #5 /data/www/www.gripgate.com/oxid6/vendor/smarty/smarty/libs/Smarty.class.php(1270): include('/data/www/www.g...')
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #6 /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(488): Smarty->fetch('page/checkout/b...', 'ox|0|0|0|0|ssl')
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #7 /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(344): OxidEsales\EshopCommunity\Core\ShopControl->_render(Object(gg_deliveryfix_basket))
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #8 /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(276): OxidEsales\EshopCommunity\Core\ShopControl->formOutput(Object(gg_deliveryfix_basket))
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #9 /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process('OxidEsales\\Esho...', 'addInstallation', NULL, NULL)
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #10 /data/www/www.gripgate.com/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #11 /data/www/www.gripgate.com/oxid6/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()
[30 Oct 08:20:15.662183 2018] [exception] [stacktrace] #12 {main}

Kann es sein das das Paypal modul irgend eine classe überlädt die ich brauche? Frage ist natürlich, warum das in meinem Test system nicht der fall ist?
Ich habe schon alle Dateien des paypal moduls verglichen, Caches geleert und views neu generiert.
Hat einer ne Idee was ich nocht überprüfen sollte.

wenn mehrere Module dieselbe Klasse erweitern/überschreiben, kann die Reihenfolge der Erweiterungen eine Rolle spielen.

damit meinst du unter module -> Installierte Shop-Module
diese Auflistungen?
die habe ich schon einmal verglichen. MIt ausnahme von einigen rot durchgestrichenen ist das gleich mit meiner Testumgebung

Wie sieht die denn aus? “on null” kann viele Ursachen haben.

Also das ist ein modul von einer Agentur welches wir schon ewig benutzen. Da wird eine Checkbox im Warenkorb angezeigt. Wenn diese geklickt wird, wird ein weiterer Artikel hinzugefügt.

'extend'      => array(
    'oxcmp_basket' => 'digidesk/dd_crosssellingarticles/components/dd_crosssellingarticles_oxcmp_basket',
    'oxarticle' => 'digidesk/dd_crosssellingarticles/application/models/dd_crosssellingarticles_oxarticle',
    'oxbasket' => 'digidesk/dd_crosssellingarticles/application/models/dd_crosssellingarticles_oxbasket',
),
'blocks' => array(
    array( 'template' => 'page/details/inc/productmain.tpl', 'block' => 'details_productmain_montage', 'file' => '/application/views/blocks/details_productmain_montage.tpl' ),
),

Und was steht da drin? Wenn’s ja etwas damit zutun hat, sollte getprice() zu finden sein.

was da steht, ist irrelevant, weil der Fehler im Warenkorb passiert und dieser Block nicht im Warenkorb ist.
Die betroffene Stelle im Warenkorb ist $basketitem->getFUnitPrice()
BasketItem.php:

public function getFUnitPrice()
{
        return \OxidEsales\Eshop\Core\Registry::getLang()->formatCurrency($this->getUnitPrice()->getPrice());
}

offensichtlich ist UnitPrice null, was darauf hindeuten könnte, dass der Preis des Artikels nicht berechnet wurde. Ich habe aber keine Ahnung, warum das in einem Shop geht und nicht in dem anderen, falls alles wirklich identisch ist.

Wenn der Fehler nicht in der Detailansicht, sondern nur im WK auftritt, wird es so sein :smile:

so, interessanterweise fehlte in dem crosselling modul die Preis.
Sprich es hätte eigentlich überhaupt nicht funktionieren dürfen weil er den Preis zwar berechnet, aber nicht übergeben hat.
Der hat sich dann wohl sonst immer den preis über die Oxid standard basket irgend wie gezogen.
Warum das dann mit dem paypal modul nicht mehr funktioniert hat, habe ich echt keine Ahnung.
Funktioniert jetzt aber.