Smarty Funktion in Shopseiten-Template funktioniert nicht

Hallo zusammen,

meine eigene Smarty-Funktion (function.partnersuche.php) funktioniert nicht wie ich mir das vorstelle.
Die Funktion wird in einer Template-Datei mittel {partnersuche} aufgerufen, diese Template-Datei verwende ich für eine Shopseite.

Die Funktion macht was sie soll, wenn ich die Datei unter engine/Library/Smarty/plugins ablege.
Lege ich die Datei (function.partnersuche.php) im _private-Verzeichnis meines Templates ab, erhalte ich folgende Ausgabe bzw. Fehlermeldung:

Ups! Ein Fehler ist aufgetreten!

Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. 

Syntax Error in template "/www/htdocs/xxxxxx/themes/Frontend/MeinTheme/frontend/index/partnersuche.tpl" on line 1 "{partnersuche}" unknown tag "partnersuche" in engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 657

Stack trace:

#0 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(443): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown tag "pa...', 1)
#1 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(2393): Smarty_Internal_TemplateCompilerBase->compileTag('partnersuche', Array)
#2 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r37()
#3 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce(37)
#4 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse(10, '\n')
#5 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile('{partnersuche}\n')
#6 engine/Library/Smarty/sysplugins/smarty_internal_template.php(187): Smarty_Internal_TemplateCompilerBase->compileTemplate(Object(Enlight_Template_Default))
#7 engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(155): Smarty_Internal_Template->compileTemplateSource()
#8 engine/Library/Enlight/View/Default.php(287): Smarty_Internal_TemplateBase->fetch('frontend/index/...', NULL)
#9 engine/Shopware/Controllers/Frontend/Custom.php(71): Enlight_View_Default->fetch('frontend/index/...')
#10 engine/Library/Enlight/Controller/Action.php(159): Shopware_Controllers_Frontend_Custom->indexAction()
#11 engine/Library/Enlight/Controller/Dispatcher/Default.php(530): Enlight_Controller_Action->dispatch('indexAction')
#12 engine/Library/Enlight/Controller/Front.php(223): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#13 engine/Shopware/Kernel.php(189): Enlight_Controller_Front->dispatch()
#14 vendor/symfony/http-kernel/HttpCache/HttpCache.php(491): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#16 vendor/symfony/http-kernel/HttpCache/HttpCache.php(448): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#17 vendor/symfony/http-kernel/HttpCache/HttpCache.php(344): Symfony\Component\HttpKernel\HttpCache\HttpCache->fetch(Object(Symfony\Component\HttpFoundation\Request), true)
#18 engine/Shopware/Components/HttpCache/AppCache.php(189): Symfony\Component\HttpKernel\HttpCache\HttpCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true)
#19 vendor/symfony/http-kernel/HttpCache/HttpCache.php(210): Shopware\Components\HttpCache\AppCache->lookup(Object(Symfony\Component\HttpFoundation\Request), true)
#20 engine/Shopware/Components/HttpCache/AppCache.php(116): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#21 shopware.php(118): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))

Wenn ich die Funktion z.B. in der frontend/index.tpl aufrufe, funktioniert auch alles wie gewollt. Denke es muss also irgendwie an der Verwendung der Funktion in der Template-Datei in Verbindung mit der Shop-Seite bzw. des _private-Verzeichnisses liegen.

Kennt jemand den Effekt oder übersehe ich einfach etwas?

Gruß vom Lizzard

Keiner einen Ansatz wo das Problem liegen könnte? Evtl. ein Bug? Was ich vergaß zu erwähnen: habe das ganze auch mit dem Standard-Responsive Template getestet: selber Effekt bzw. Fehler.

Hab leider keine Idee. KOmmt mir auch wie ein Bug vor.

Auch wenn es hierfür nun reichlich spät ist, ich hatte hier dasselbe Problem und antworte nur der Vollständigkeit halber falls jemand anderes dasselbe Problem haben sollte. Grundsätzlich sagt die Fehlermeldung ja aus das im aktuellen Kontext das Plugin nicht bekannt ist. Dafür spricht ja auch dass der Aufruf an einer anderen Stelle durchaus funktioniert.
Meine Lösung war, auch bei einem Event auf “Enlight_Controller_Action_PreDispatch_Frontend_Custom”  das Plugin Verzeichnisses über Shopware()->Template()->addPluginsDir($verzeichnispfad) hinzuzufügen. Zuvor wurde dies nur bei einem Event auf “Enlight_Controller_Action_PreDispatch_Frontend” gemacht. Dadurch wird das Pluginverzeichnis auch im Kontext von Shopseiten bekannt und die Plugins können verwendet werden. Meinem Verständis nach sollte letzteres Event zwar den ersten Aufruf mit beinhalten da es ein gröber definiertes Event ist, allerdings scheint dies hier nicht gegriffen zu haben. Vermutlich gibt es hierfür allerdings auch einfachere Möglichkeiten.

Welche Shopware Version benutzst du denn?

Ich kann dieses Verhalten in Shopware 5.6.1 reproduzieren. 

@MrWulf schrieb:

Meine Lösung war, auch bei einem Event auf “Enlight_Controller_Action_PreDispatch_Frontend_Custom”  das Plugin Verzeichnisses über Shopware()->Template()->addPluginsDir($verzeichnispfad) hinzuzufügen. 

MrWulf, hättest du evtl. Beispielcode für diesen Lösungsansatz? Habe mich an https://developers.shopware.com/developers-guide/event-guide/#some-examples versucht, aber bin nicht so recht vorangekommen. Bisher hat es nur geholfen, das Plugin in engine/Library/Smarty/plugins abzulegen. Langfristig möchte ich solche Core-Veränderungen eher vermeiden, und würde daher deinen Weg bevorzugen.