Liebe Community, ich habe ueber die Shopseiten einen kompletten Seitenbaum aufgebaut, auf dem zumeist statische Inhalte gezeigt werden. Einzelne Seiten sollen jedoch auch dynamische Inhalte aus der DB zeigen, wie z.B. Downloadlisten. Hierfuer wollte ich ein Plugin schreiben, welches die Inhalte nur auf diesen Seiten ausgibt. Hier der entsprechende Code aus der Bootstrap.php public function install() { $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Custom', 'onPostDispatchFrontendCustom' ); $this-\>subscribeEvent($event); return true; } public static function onPostDispatchFrontendCustom(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>view(); $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/templates/'); $view-\>extendsTemplate('frontend/plugins/pluginname/index.tpl'); }
Das funktioniert soweit auch alles ganz gut, mit der Problematik, dass das Template aus dem Plugin nur die Bloecke aus der frontend/custom/index.tpl ueberschreibt, nicht aber die Bloecke, welche in dem seitenspezifischen Template stehen (backend -> Inhalte -> Shopseiten —> ganz unten Tpl. Pfad). Das heisst die Hierarchie scheint folgende zu sein: frontend/index/index.tpl frontend/custom/index.tpl Plugins/Local/Frontend/PluginName/templates/frontend/plugins/templatename/index.tpl frontend/index/custom/individual/pagename.tpl In dieser Hierarchie muesste die tpl des Plugins nach ganz unten ruecken, damit ich mein Ziel erreiche. Habt Ihr eine Idee, wie das zu verwirklichen ist? Oder gibt es eine Alternative, mit der ich dynamische Inhalte auf Custom Pages mit eigenem Template bringen kann? Leider habe ich bei der Forensuche in diese Richtung auch nur unbeantwortete Posts gefunden. Beste Gruesse, Eike
Nun antworte ich mir selber. Habe das Problem geloest, indem ich dem Plugin ein Configfeld hinzugefuegt habe, in das man kommasepariert eintragen kann, auf welchen Seiten das Plugin gezeigt werden soll. In der Bootsrap sieht dann wie folgt aus public function install() { $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Custom', 'onPostDispatchFrontendCustom' ); $this-\>subscribeEvent($event); $form = $this-\>Form(); $form-\>setElement('text', 'ids', array('label'=\>'Seiten IDs Kommagetrennt','value'=\>'')); $form-\>save(); return true; } public static function onPostDispatchFrontendCustom(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>view(); $config = Shopware()-\>Plugins()-\>Frontend()-\>PluginName()-\>Config(); $view-\>pageIds = explode(',',preg\_replace("/\s+/", "",$config-\>ids)); $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/templates/'); $view-\>extendsTemplate('frontend/plugins/pluginname/index.tpl'); } }
Im Template appende ich in einen Block, welcher im Custom Template vorhanden ist und pruefe dabei, ob die SeitenId in der config steht {block name='frontend\_custom\_tpl\_2' append} {if in\_array($sCustomPage.id, $pageIds)} Hier ist unser Modul {/if} {/block}