Eigenes Dynamisches Smarty Template

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:

  1. Ist der Event vielleicht falsch und deswegen kann die Smarty Funktion nicht regstriert werden (obwohl wir loggings gemacht haben und der Code durchlaufen wird)
  2. Haben wir generell ein Logik Fehler wie dynamische Smarty Plugins im Shopware Content regstriert werden?
  3. 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.
  4. 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

https://developers.shopware.com/designers-guide/smarty/#register-custom-smarty-plugins

@christiantrade schrieb:

https://developers.shopware.com/designers-guide/smarty/#register-custom-smarty-plugins

Aber ist /_private/smarty/function.markdown.php nicht im Theme? Soweit ich weiß nicht Part des Plugins …
Zudem war da die Frage wie es mit einem dynamischen Callback funktioniert. 

Sorry aber lest auch noch mal in die Developer Doku ein.

Ihr erstellt ein neues Plug-In auf alter Plug-In-Basis?

Ihr macht Änderungen im Bare Theme?

Schau dir das mal an, ich benutze im Profiler auch eigene Smarty functions. FroshProfiler/AddTemplatePluginDirCompilerPass.php at master · FriendsOfShopware/FroshProfiler · GitHub

1 „Gefällt mir“

@BestShopPossible schrieb:

Sorry aber lest auch noch mal in die Developer Doku ein.

Ihr erstellt ein neues Plug-In auf alter Plug-In-Basis?

Ihr macht Änderungen im Bare Theme?

Na gut hört sich so an als ob das Plugin neu ist wenn ich nochmal meinen Text lese, aber das Plugin selbst ist schon 4 Jahre alt und wird nun erweitert. Aber gut zu wissen dass es eine neue Struktur gibt, werde mich da mal mit beschäftigten.

Nun nein wir wollen nicht das Theme anpassen, darum geht es ja. Wir brauchen ein Smarty Template was ein Callback hat und nicht fest im Theme ist … 

 

@Shyim schrieb:

Schau dir das mal an, ich benutze im Profiler auch eigene Smarty functions. https://github.com/FriendsOfShopware/FroshProfiler/blob/master/Components/CompilerPass/AddTemplatePluginDirCompilerPass.php#L21

https://github.com/FriendsOfShopware/FroshProfiler/blob/master/FroshProfiler.php#L72

Danke dir. Schaue ich mir an. Aber hast du auch ein Custom Callback? Oder muss ich die Wert immer der View zuweisen um es dann in dem Smarty Template nutzen zu können?