Hi, ich versuche ein eigenes Plugin zu schreiben, das auf Frontend Listing Controller hört, um auf der Kategorieseite eine Blockerweiterung vorzunehmen und zugleich einen eigenen Controller zu implementieren, um aus dieser Erweiterung den eigenen Controller anzusprechen. public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing', 'onPostDispatchListing' ); $this-\>subscribeEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_TestPlugin', 'onGetFrontendController' ); return true; }
In der „onPostDispatchListing“ wird dann die Template Erweiterung geladen und in „onGetFrontendController“ der Controller. das funktioniert soweit gut und die, Blockerweiterung (die ein jQueryUI Element ist, das über .submit Funktion von jQuery den Controller aufruft), sorgt dafür dass die indexAction() des eigenen Controllers getriggert wird. Das Problem ergibt sich jedoch, wenn die indexAction() durchgelaufen ist und in einer leeren Seite resultiert. Über PHPFire in Firefox sehe ich jedoch, dass bestimmte .tpl Dateien nicht gefunden werden, die allem Anschein nach benötigt werden: exception 'SmartyException' with message 'Unable to load template snippet 'frontend/test\_plugin/index.tpl |frontend/plugins/compare/index.tpl |frontend/plugins/seo/index.tpl'' in .../engine/Library/Smarty/sysplugins/smarty\_internal\_templatebase.php
Kann mir jemand ein Hinweis geben was mir fehlt bzw. wo eventuell Fehler liegen könnte. Wenn Quellcode nötig, poste ich es gern hier rein. In den Tutorials mit eigenen Controllers, wird nirgendwo der Bedarf nach diesen tpl Dateien erwähnt, bzw. von mir übersehen worden. Viele Grüße, Edin
Veruch dies mal im Controller. $this->View()->setTemplate();
Hi, die Fehlermeldung ist weg, die Seite bleibt aber leer. Da ich noch immer in der Lernphase bin versuche ich das mal wie folgt zu erklären: Über Frondend_Listing PostDispatch Listener in meinem Plugin, sorge ich dafür, dass ein jQuery UI Element in die Kategorieseite eingebunden wird. Zugleich wird ein eigener Controller mit indexAction eingebunden. Über das jQueryUI Element rufe ich meine IndexAction, von meinem Controller aus, und dieser erstellt dann eine neue Seite. Die ist dann leer, weil ich in der IndexAction kein Template zugewiesen habe. Hoffentlich soweit richtig erstmal. Der Sinn meines Controllers ist es den Einfluss auf die geladenen Artikeln zu nehmen, d.h. in Abhängigkeit von Werten aus dem jQueryUI Element soll mit eigener Query die Liste der Artikel geladen werden, die angezeigt werden sollen. Hierzu habe ich mir den Frontend_Listing Controller angeschaut, wo die ganze Geschichte in der IndexAction passiert. Unter anderem gibt es da die Zeile $categoryArticles = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory($categoryId);
Ich habe mir gedacht, ich kopiere einfach die indexAction und ersetze die sGetArticlesByCategory mit meiner eigenen Funktion, die die Artikel liefert und der Rest, inkl. Template etc. läuft wie wenn man Standard Listing Controller aufruft. So einfach ist das dann aber wohl nicht ? Wenn ich $this->View()->setTemplate(); einbaue bleibt die Seite leer, und wenn nicht, dann bekomme ich die genannten Smarty Fehler. Es gibt leider kein Tutorial, der beschreibt, wie man Einfluss auf die Artikeln im Listing nehmen kann. Ich habe mich daher an diesem Tutorial orientiert: http://wiki.shopware.de/Fortgeschritten … 8_870.html Dort wird beschrieben wie ein Variantenwechsel auf der Kategorieseite vorgenommen wird. Warum dort die Seite nicht verschwindet liegt vermutlich daran, dass Sachen einfach mit AJAX überschrieben werden. Und Controller lediglich zum Überschreiben bestehender Inhalte dient. Ist es also irgendwie möglich mit relativ wenig Aufwand, eine eigene Query für Artikellisting zu integrieren, und bestehende Listing Strukturen zu verwenden (also so ähnlich wie ich es vorhatte, oder anders einfach), oder muss man wirklich selbst komplett eigene Template Dateien erstellen und mit diesen das Listing Template nachahmen. Vielleicht fehlt mir in meinen Überlgungen nur noch das laden der passenden Tempalte Dateien aus meiner IndexAction? Viele Grüße, Edin