Backend Plugin: Unable to load template snippet

Hiho Shopware-Gemeinde,

nach gefühlten 20 Jahren des älter werdens, wage ich mich mal wieder an Shopware heran und versuche derzeitig ein Backend Plugin nach der neuen Methode zu schreiben. Leider stoße ich hier auf ein Problem wo ich absolut nicht mehr weiter weiß und bräuchte Eure Hilfe.

Folgende Fehlermeldung bekomme ich beim Laden eine JS Datei:

Unable to load template snippet 'backend/article_list/app.js|backend/article_list/search_klabeharticle.js' in D:\UwAmp\www\shopware\engine\Library\Smarty\sysplugins\smarty_internal_templatebase.php on line 127
Stack trace:

#0 D:\UwAmp\www\shopware\engine\Library\Enlight\View\Default.php(276): Smarty_Internal_TemplateBase->fetch()
#1 D:\UwAmp\www\shopware\engine\Library\Enlight\Controller\Plugins\ViewRenderer\Bootstrap.php(216): Enlight_View_Default->render(Object(Enlight_Template_Default))
#2 D:\UwAmp\www\shopware\engine\Library\Enlight\Controller\Plugins\ViewRenderer\Bootstrap.php(242): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->renderTemplate(Object(Enlight_Template_Default))
#3 D:\UwAmp\www\shopware\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 D:\UwAmp\www\shopware\engine\Library\Enlight\Event\Handler\Default.php(91): call_user_func(Array, Object(Enlight_Controller_ActionEventArgs))
#6 D:\UwAmp\www\shopware\engine\Library\Enlight\Event\EventManager.php(214): Enlight_Event_Handler_Default->execute(Object(Enlight_Controller_ActionEventArgs))
#7 D:\UwAmp\www\shopware\engine\Library\Enlight\Controller\Action.php(202): Enlight_Event_EventManager->notify('Enlight_Control...', Object(Enlight_Controller_ActionEventArgs))
#8 D:\UwAmp\www\shopware\engine\Library\Enlight\Controller\Dispatcher\Default.php(530): Enlight_Controller_Action->dispatch('indexAction')
#9 D:\UwAmp\www\shopware\engine\Library\Enlight\Controller\Front.php(223): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#10 D:\UwAmp\www\shopware\engine\Shopware\Kernel.php(189): Enlight_Controller_Front->dispatch()
#11 D:\UwAmp\www\shopware\vendor\symfony\http-kernel\HttpCache\HttpCache.php(491): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#12 D:\UwAmp\www\shopware\engine\Shopware\Components\HttpCache\AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#13 D:\UwAmp\www\shopware\vendor\symfony\http-kernel\HttpCache\HttpCache.php(258): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#14 D:\UwAmp\www\shopware\engine\Shopware\Components\HttpCache\AppCache.php(105): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#15 D:\UwAmp\www\shopware\shopware.php(118): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#16 {main}

Das ganze passiert durch den Aufruf der Artikel-Übersicht und die passende Funktion aus dem Plugin wäre wie folgt
 


​public function onBackendArticleListPostDispatch(\Enlight_Event_EventArgs $args) {
        $args->getSubject()->View()->addTemplateDir($this->getPath() . 'Views/');
        $args->getSubject()->View()->extendsTemplate('backend/article_list/search_klabeharticle.js');
    }

Hat jemand zufällig eine Idee was ich hier falsch mache bzw. wo der Fehler liegt ? Mir scheint es so, als würde Shopware nicht den kompletten Pfad des Plugins bekommen. Ich wäre Euch für jegliche Art von Hilfe dankbar, auch wenn's darum geht mir einen auf die Mütze zu geben 

Der komplette Code vom Plugin wäre


 'onBackendArticleListPostDispatch'
        ];
    }

    public function install(InstallContext $context) {
        return true;
    }

    public function uninstall(UninstallContext $context) {
        return true;
    }

    public function onBackendArticleListPostDispatch(\Enlight_Event_EventArgs $args) {
        $args->getSubject()->View()->addTemplateDir($this->getPath() . 'Views/');
        $args->getSubject()->View()->extendsTemplate('backend/article_list/search_klabeharticle.js');
    }
}

Nach weiteren Pötten an Kaffee, hab ich den Fehler dank des Forums selber gefunden.

Und was war das Problem bzw. was ist die Lösung?

moin moin,

es lag am Aufruf von $this->getPath

zusätzliche Funktion eingefügt
 

private function getPluginPath()
    {
        return $this->container->get('kernel')->getPlugins()['PluginName']->getPath();
    }

und bei der eigentlichen Funktion zum laden des Templates den Code wie folgt abgeändert
 

public function onLoadBackendArticleList(\Enlight_Event_EventArgs $args) {

/* Start - Hier der neue Aufruf */
        $args->getSubject()->View()->addTemplateDir($this->getPluginPath() . '/Views/');
/* Ende - Hier der neue Aufruf */

        $args->getSubject()->View()->extendsTemplate('backend/article_list/search_klabeharticle.js');
    }

 

1 Like