Function 'loadUserPayPalUser' does not exist

Hallo,

mein Modul:

$sMetadataVersion = '1.1';
...
    'extend'       => array(
			'oxuser'	=> 'preisb/controllers/myUser',
    ),
...
class myUser extends myUser_parent {

	public function inGroup($sGroupID) {
		$retValue = parent::inGroup($sGroupID);
		if ( $retValue == false && $sGroupID == "oxidpriceb") {
			$myconfig = oxRegistry::get("oxConfig");
			return $this->inGroup($myconfig->getConfigParam("myGroup"));
		}
		return $retValue;
	}
}

Es kommt der Fehler “Function ‘loadUserPayPalUser’ does not exist”, wenn mein Modul vor PayPal liegt.
Wenn ich es an das Ende der User lege, funktioniert ein anderes Modul nicht.

Was mache ich falsch?
Was muss man beachten, wenn man die Reihenfolge in “Installierte Shop-Module” festlegt bzw. dort ein Fehler auftritt?

Danke Thoni

Manchmal wird dieses Modul auch gar nicht aufgerufen - abhängig von der Position.

Dies lässt sich schwer beantworten, weil dies wahrscheinlich ein projektspezifisches Problem auf Deinen individuellen Shop ist.

Die Reihenfolge der installierten Module spielt für die Vererbungskette eine Rolle.

Die Vererbungskette wird verwendet wenn man mit z.B. mit oxNew(‘oxuser’) das Model User aufruft, dann ist sichergestellt wenn alle Module die Vererbungskette einhalten - das bestimmte Logik ausgeführt wird.

Wenn man jetzt aber eine überladene Klasse außerhalb von oxNew(…) aufruft z.B. new myUser() wird die Vererbungskette unterlaufen und Funktionen aus anderen Modulen wie z.B. von PayPal Modul die Funktion loadUserPayPalUser() kann dann nicht bekannt sein.

Deshalb sollte das User Model mit oxNew(‘oxuser’) aufgerufen werden.

Also könntest die Verwendung Prüfung. Anhand der oxideshop.log Datei erhälst über die Fehlermeldung genauere Infos an welcher Stelle der Aufruf fehlschlägt und kannst ggfs. die Stelle ausfindig machen welche die Vererbungskette nicht einhält.

Viele Grüße,
Tim

1 Like

Vielen Dank für deine ausführliche Info.

Tatsächlich wird ein Modul aufgeführt.
Es müsste mystepregister sein. Sehe ich das richtig?
Den Aufruf habe ich aber im ganzen Shop noch nicht gefunden.

[2021-12-22 12:14:55] OXID Logger.ERROR: Function 'loadUserPayPalUser' does not exist or is not accessible! (mystepregister)
["[object] (OxidEsales\\Eshop\\Core\\Exception\\SystemComponentException(code: 0): Function 'loadUserPayPalUser' does not exist or is not accessible! (mystepregister)
at /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/Base.php:84)\n[stacktrace]
#0 /www/htdocs/shop/source/modules/oe/oepaypal/Model/Order.php(236): OxidEsales\\EshopCommunity\\Core\\Base->__call('loadUserPayPalU...', Array)
#1 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Application/Model/Order.php(2037): OxidEsales\\PayPalModule\\Model\\Order->validateDelivery(Object(getitemscount))
#2 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Application/Model/Order.php(493): OxidEsales\\EshopCommunity\\Application\\Model\\Order->validateOrder(Object(getitemscount), Object(mystepregister))
#3 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/OrderController.php(219): OxidEsales\\EshopCommunity\\Application\\Model\\Order->finalizeOrder(Object(getitemscount), Object(mystepregister))
#4 /www/htdocs/shop/source/modules/vermittlung/controllers/myDealerOrder.php(53): OxidEsales\\EshopCommunity\\Application\\Controller\\OrderController->execute()
#5 /www/htdocs/shop/source/modules/oe/oepaypal/Controller/OrderController.php(101): myDealerOrder->execute()
#6 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(534): OxidEsales\\PayPalModule\\Controller\\OrderController->execute()
#7 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(345): OxidEsales\\EshopCommunity\\Core\\Controller\\BaseController->executeFunction('execute')
#8 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(279): OxidEsales\\EshopCommunity\\Core\\ShopControl->executeAction(Object(su_order), 'execute')
#9 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(142): OxidEsales\\EshopCommunity\\Core\\ShopControl->_process('OxidEsales\\\\Esho...', 'execute', NULL, NULL)
#10 /www/htdocs/shop/source/modules/assofort/su_shopcontrol.php(18): OxidEsales\\EshopCommunity\\Core\\ShopControl->start()
#11 /www/htdocs/shop/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(27): su_shopcontrol->start()
#12 /www/htdocs/shop/source/index.php(16): OxidEsales\\EshopCommunity\\Core\\Oxid::run()
#13 {main}\n"] []


Ohne Dein Modul funktioniert alles? Welchen Sinn hat obige Abfrage?

Ja, ohne funktionierte es.

Danach konnte man nicht per PaPal bestellen. Statt der Thankyou-Seite kam die Startseite oder auch die “Meine Daten”.

Ohne dieses Modul stellte ich fest, dass es auch auf die Reihenfolge der anderen Module im “User” - Bereich ankommt.

Das Modul soll bei Aktionen einer bestimmten Usergroup den Preis B zuordnen.

Das würde ich in getusergroups verlagern.