ich bin gerade dabei ein Modul zu erstellen, welches Kunden aus dem WaWi importiert, in OXID anlegt und anschließend eine Mail verschickt.
Ich habe dazu die Originaldateien OrderOverview.php, Email.php und order_cust.tpl als Grundlage genommen.
Import und Anlegen der Kunden klappt erfolgreich. Lediglich beim Emailversand kommt es zur folgenden Fehlermeldung:
Fatal error: Uncaught Error: Call to a member function getShop() on null in /home/xyz/abc.company.net/source/tmp/smarty/cc4a7056501ecdae1ca60eba3c65e410^%%04^04D^04D10A41%%kundenimport_email_html.tpl.php:3 Stack trace: #0 /home/xyz/abc.company.net/vendor/smarty/smarty/libs/Smarty.class.php(1270): include() #1 /home/xyz/abc.company.net/source/modules/vendor/module/Core/sendData.php(130): Smarty->fetch(‘kundenimport_…’) #2 /home/xyz/abc.company.net/source/modules/vendor/module/Application/Model/kundenimport.php(262): sendData->sendEmail(Object(OxidEsales\Eshop\Application\Model\User), ‘’, ‘123456’) #3 /home/xyz/abc.company.net/source/modules/vendor/module/public/kundenimport_cron.php(58): kundenimport->KundenImport(‘/home/xyz/…’, ‘Kunden.csv’, ‘|’, ‘"’) #4 {main} thrown in /home/xyz/abc.company.net/source/tmp/smarty/cc4a7056501ecdae1ca60eba3c65e410^%%04^04D^04D10A41%%kundenimport_email_html.tpl.php on line 3
In der abgewandelten order_cust.tpl beginne ich wie im Original mit den folgenden Zeilen:
der wichtige Teil der Fehlermelduing ist “Call to a member function getShop() on null”,
das bedeutet in etwa: die Variable, deren Funktion getShop() ausgeführt werden muss, gibts nicht.
Das wäre dann diese Zeile: [{assign var="shop" value=$oEmailView->getShop()}]
Deswegen würde $this->setViewData("shop", $shop); auch nicht zur Lösung beitragen.
Erbt Deine Klasse “sendData” von Email oder von PhpMailer?
Copy-Paste Fehler, sorry. Funktion heißt sendRegisterEmail_xyz. Habe es beim Bereinigen übersehen.
Eine Anpassungen zum Original ist die Zeile $renderer = $this->getRenderer();
Die habe ich ersetzt durch $smarty = $this->_getSmarty();
Wie muss ich die ViewData richtig setzen, sodass ich sie im tpl wieder aufgreifen kann?
Wenn ich den Body nicht mit dem Template verknüpfe, sondern einfach ‘Body’ übergebe, wird die Mail sauber verschickt.
doch, doch, seit der Implementierung von Twig wurde es auf $renderer = $this->getRenderer(); umgestellt
könntest du es mal mit $renderer Zeug probieren?
ich habe mal den Code der beiden Funktionen verglichen und es scheint so, als würden bei ‘_getSmarty’ ein paar Schritte fehlen.
Aber gut, wenn eine neuere Version als angegeben benutzt wird, ist klar, dass etwas vermischt wird. Hier müsst man den kompletten Code haben, um helfen zu können.
Habe ich gemacht, dann bekomme ich aber diese Fehlermeldung:
Fatal error : Uncaught OxidEsales\Eshop\Core\Exception\SystemComponentException: Function ‘getRenderer’ does not exist or is not accessible!
Enschuldige bitte die Verwirrung. Es geht um Version 6.2. Mit Original meinte ich die Original-Funktion sendRegisterEmail. Meine abgewandelte Funktion heißt sendRegisterEmail_xyz und unterscheidet sich eigentlich nur in der oben erwähnten Render-Funktion und anderen Templates. Das ist alles. Ich hoffe, das hilft beim Nachvollziehen. Danke für die Geduld mit mir.
Ist aber auch nicht nötig und es wäre sicher schon längst erledigt, wenn man sich das Modul (zumindest die metadata inkl. der von oxemail erbenden Klasse) anschauen könnte.