Unable to load template snippet durch createStatusMail()

Hi! Ich lasse ein Script über einen eigenen Frontend-Controller laufen (also, mit komplett eigenem Inhalt ohne SW-Template), der u.a. Versandrückmeldungen über den Shop verschicken lässt (Shopware()->Modules()->Order()->sendStatusMail() usw) Das lief in SW4 problemlos - in SW5 gibt es nun einen „Fehler“. Zunächst, die Versandbestätigungen werden normal verschickt und kommen an! Nur das Frontend zeigt „Ups! Ein Fehler ist aufgetreten!“ - nach der Verarbeitung. Das passiert aber nur nachdem Versandrückmeldungen verschickt werden, bei all anderen Prozessen (Import, Export von Daten …) passiert das nicht. Interessant - ich kann die ganze Logik in einen try catch setzen - ändert nichts. Ich habe die logfiles geprüft, und dort gibt es folgenden Eintrag wenn das Frontend crashed - aus dem ich leider nicht schlauer werden. [2015-05-28 14:26:52] core.ERROR: exception 'SmartyException' with message 'Unable to load template snippet 'frontend/index.tpl|frontend/plugins/advanced\_menu/index.tpl|frontend/plugins/seo/index.tpl'' in /www/htdocs/xxx/sw5/engine/Library/Smarty/sysplugins/smarty\_internal\_templatebase.php:127 Stack trace: #0 /www/htdocs/xxx/sw5/engine/Library/Enlight/View/Default.php(274): Smarty\_Internal\_TemplateBase-\>fetch() #1 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(216): Enlight\_View\_Default-\>render(Object(Enlight\_Template\_Default)) #2 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(242): Enlight\_Controller\_Plugins\_ViewRenderer\_Bootstrap-\>renderTemplate(Object(Enlight\_Template\_Default)) #3 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(136): Enlight\_Controller\_Plugins\_ViewRenderer\_Bootstrap-\>render() #4 [internal function]: Enlight\_Controller\_Plugins\_ViewRenderer\_Bootstrap-\>onPostDispatch(Object(Enlight\_Controller\_ActionEventArgs)) #5 /www/htdocs/xxx/sw5/engine/Library/Enlight/Event/Handler/Default.php(91): call\_user\_func(Array, Object(Enlight\_Controller\_ActionEventArgs)) #6 /www/htdocs/xxx/sw5/engine/Library/Enlight/Event/EventManager.php(211): Enlight\_Event\_Handler\_Default-\>execute(Object(Enlight\_Controller\_ActionEventArgs)) #7 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Action.php(202): Enlight\_Event\_EventManager-\>notify('Enlight\_Control...', Object(Enlight\_Controller\_ActionEventArgs)) #8 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Dispatcher/Default.php(524): Enlight\_Controller\_Action-\>dispatch('indexAction') #9 /www/htdocs/xxx/sw5/engine/Library/Enlight/Controller/Front.php(227): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #10 /www/htdocs/xxx/sw5/engine/Shopware/Kernel.php(143): Enlight\_Controller\_Front-\>dispatch() #11 /www/htdocs/xxx/sw5/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(490): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #12 /www/htdocs/xxx/sw5/engine/Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #13 /www/htdocs/xxx/sw5/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(447): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #14 /www/htdocs/xxx/sw5/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(347): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>fetch(Object(Symfony\Component\HttpFoundation\Request), true) #15 /www/htdocs/xxx/sw5/engine/Shopware/Components/HttpCache/AppCache.php(178): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>lookup(Object(Symfony\Component\HttpFoundation\Request), true) #16 /www/htdocs/xxx/sw5/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(211): Shopware\Components\HttpCache\AppCache-\>lookup(Object(Symfony\Component\HttpFoundation\Request), true) #17 /www/htdocs/xxx/sw5/engine/Shopware/Components/HttpCache/AppCache.php(114): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #18 /www/htdocs/xxx/sw5/shopware.php(101): Shopware\Components\HttpCache\AppCache-\>handle(Object(Symfony\Component\HttpFoundation\Request)) #19 {main} [] {"uid":"845cef8"} Hat wer eine Idee? Irgendwie muss da ja was ausgelöst bzw. im Shop passieren, was die normale Weiterverarbeitung stört bzw. eine Exception wirft … :frowning: Schöne Grüße, Niklas UPDATE #1: Wie unten weiter beschrieben wird das durch nachvollziehbar durch Shopware()->Modules()->Order()->createStatusMail() ausgelöst UPDATE #2: Ich habe die Zeile in der createStatusMail() herausgefunden, die das ganze problem bei mir auslöst: $shop-\>registerResources(Shopware()-\>Bootstrap()); Hat wer eine Idee was das genau macht bzw. wieso das Probleme auf meinem eigenen Frontend-Controller auslöst?

Hey Niklas, ich denke es ist nur das hier wichtig: 'Unable to load template snippet 'frontend/index.tpl|frontend/plugins/advanced\_menu/index.tpl|frontend/plugins/seo/index.tpl' Was fehlt ist offensichtlich die index.tpl in deinem frontend/plugins/seo Ordner. So wie es aussieht, erweitert das Plugin Advanced Menu deine index.tpl und somit wird auch das (in Shopware 5 standardmäßig enthaltene (Engine)) Seo Plugin geladen bzw. das Snippet dazu gesucht. Schau mal in deinem Template ob du eine Datei unter dem o.g. Pfad finden kannst. Sollte dies nicht der Fall sein, musst du entweder diese Datei implementieren, oder mal schauen ob dein Theme wirklich nichts erweitert (also von einem Parent erbt) - dazu muss parent_id in der Tabelle s_core_templates in deinem Theme-Record NULL sein. Ich hoffe das ging in die richtige Richtung Gruß Andre

Hi! Danke für eine schnelle Idee! Also, die Verarbeitung läuft über ein eigenes Plugin. Das lauscht auf einen eigenen Frontend-Controller. Danach wird per addTemplateDir und return der Pfad zu einem eigenen Frontend-Controller gegeben. In diesem Controller wird im preDispatch per loadTemplate eine frontend/index.tpl geladen (mit komplett eigenem Inhalt). Diese ganze Funktionalität funktioniert die ganze Zeit, und es wird wie gesagt nur nach der Verarbeitung von Versandrückmeldung dieser Fehler von oben ausgelöst … deswegen ist das so komisch! Die seo/index.tpl existiert natürlich im Core. Hatte ich falsch ausgedrückt - in dem Shop wo das Plugin läuft existiert ein Theme welches vom Responsive erbt, das ist korrekt! Am AdvancedMenu/SEO wurde aber nichts inhaltlich geändert … Schöne Grüße, Niklas

Hey, hmmm. Dann raffe ichs nicht und würde tatsächlich mal “greppen” um zu schauen an welcher Stellen/welchen Stellen exakt auf die seo/index.tpl zugegriffen wird. Vielleicht ist da irgendwo etwas durchgerutscht und hat einen falschen Pfad bzw. schaut an einer falschen Stelle. Fakt ist ja, dass er das SEO-Snippet nicht laden kann. Übrigens ab jetzt auch nur Vermutungen, aber bekanntlich helfen ja manchmal winzige Inputs. :smiley: Gruß

Ja, jede Idee hilft, das ist immer gut. Ich bin aber in einer anderen Richtung weitergekommen, vielleicht betrifft das ja auch andere. Bei mir wird das anscheinend durch einen Aufruf von Shopware()->Modules()->Order()->createStatusMail() hervorgerufen. Shopware()->Modules()->Order()->sendStatusMail() funktioniert da ich testweise die Versandbestätigungen bekomme, zum Test um den Fehler zu reproduzieren reicht das aber wegzulassen. Irgendetwas muss also in Shopware()->Modules()->Order()->createStatusMail() passieren, dass diese Smarty Fehler von oben geworfen werden bzw. irgendwelche bestimmten tpl’s nicht gefunden werden. Da die Funktionalität bei mir aber jetzt fast exakt gleich ist wie im Backend unter engine/Shopware/Controllers/Backend/Order.php verstehe ich das nicht … UPDATE: Habe oben den Beitrag erweitert, $shop->registerResources(Shopware()->Bootstrap()); löst das ganze Problem bei mir aus. Schöne Grüße, Niklas

Genau mit dem gleichen Problem habe ich ebenfalls zu kämpfen.

Ich habe das mal tiefer verfolgt und herausgefunden, dass der von dir bereits erwähnte Code 

$shop->registerResources(Shopware()->Bootstrap())

den Templatemanager neu lädt. Dadurch werden alle registrierten Templatepfade zurückgesetzt.

Du kannst die Templatepfade nachträglich initialisieren. Ergänze in deinem Controller

 

 public function preDispatch() { 
 /\*\* @var \Shopware\Components\Plugin $plugin \*/ 
 $plugin = $this-\>get('kernel')-\>getPlugins()['PluginName']; 
 $this-\>get('template')-\>addTemplateDir($plugin-\>getPath() . '/Resources/views/'); 
 }

 

Hier wird nach Aufruf der Action der Templatepfad gesetzt und der Fehler tritt nicht mehr auf.