Hallo,
wir stellen ein Plugin bereit was in Zukunft um ein Smarty Template erweitert werden muss um bestimmten Content an einer beliebigen Stelle in Templates anzuzeigen. Soweit ich in der Doku gelesen habe wäre ein Weg eine Smarty Funktion als Template im Theme Ordner anzulegen. Dies würden wir gerne vermeiden da unser Plugin Theme unabhängig funktionieren soll. Zudem brauchen wir einen dynamischen Callback der Daten aus der DB laden soll.
Also Ziel soll der Benutzer des Plugins in jedem Template sowas nutzen können:
{customfunc param=$foo.bar}
Wir würden im Endeeffekt gerne https://www.smarty.net/docs/en/api.register.plugin.tpl nutzen und ein dynamisches Smarty Plugin zur Laufzeit registrieren und damit auch einen Callback in dem PHP Controller zu bekommen wo wir die entsprechenden DB Zugriffe machen können und unabhängig vom Theme zu sein.
Wir haben in der Bootstrap Klasse folgenden Event gebunden:
$this->subscribeEvent('Enlight_Controller_Action_PostDispatchSecure_Frontend', 'onControllerCall');
Die Methode sieht dann so aus:
public function onControllerCall(Enlight_Event_EventArgs $args){
$template = \Enlight_Class::Instance('Enlight_Template_Manager');
$template->registerPlugin('function', 'customfunc', [&$this, 'foobar']);
}
Und der Callback:
public function foobar($param){
// todo db stuff
return "";
}
Allerdings laufen wir jetzt in den Fehler nachdem wir den ersten Codeschnippels im Template hinzugefügt haben:
RROR:
Syntax Error in template "/var/www/shopware5/themes/Frontend/Bare/frontend/detail/content.tpl" on line 68 "{customfunc param=$foo.bar}" unknown tag "customfunc" in engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 657
Und kommen da leider auch nicht wirklich weiter. Wir haben den Quellcode von Shopware nach registerPlugin und auch Github nach möglichen Templates mit dynamischen Smarty Plugins durchsucht - leider ohne Erfolg.
Daher meine Fragen:
- Ist der Event vielleicht falsch und deswegen kann die Smarty Funktion nicht regstriert werden (obwohl wir loggings gemacht haben und der Code durchlaufen wird)
- Haben wir generell ein Logik Fehler wie dynamische Smarty Plugins im Shopware Content regstriert werden?
- Falls keine dynamischen Smarty Templates möglich sind wie lässt sich das Problem lösen diese abhängig vom Theme sind, der Kunde kann ja eigene Themes nutzen.
- Wenn man ein Smarty Plugin Datei anlegen muss wie können dynamische Callbacks genutzt werden?
Ich freue mich über jede Hilfe. Vielen Dank.
Gruß,
Sebastian