Moin, da die suche nichts passendes liefert, oder ich wahlweise blind bin… Ich schreibe gerade an meinem ersten Testplugin, aber irgendwie hakt es da noch ein wenig… Bootstrap.php: class Shopware\_Plugins\_Frontend\_MeinPlugin\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install(){ $event = $this-\>createEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_MeinPlugin', 'onGetControllerPath' ); $this-\>subscribeEvent($event); $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); [Formular fürs Backend....] return true; } public static function onGetControllerPath(Enlight\_Event\_EventArgs $args) { return dirname(\_\_FILE\_\_).'/Controller.php'; } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); if(!$request-\>isDispatched()||$response-\>isException()||$request-\>getModuleName()!='frontend') { return; } // Template laden $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/templates'); $view-\>loadTemplate('/frontend/plugins/MeinPlugin/index.tpl'); }
Controller.php: class Shopware\_Controllers\_Frontend\_Controller extends Enlight\_Controller\_Action { public function indexAction() { die("Moin, ich bin der Controller..."); //Template laden/setzen $this-\>View()-\>addTemplateDir(dirname(\_\_FILE\_\_).'/templates'); $this-\>View()-\>setTemplate('/frontend/plugins/MeinPlugin/index.tpl'); } }
Leider wird aber während des Bootstrapprozesses für das Plugin die Funktion “onGetControllerPath” nicht betreten, sodass der Controller logischerweise nicht ausgeführt wird. Auch ein die() innerhalb der Funktion macht nix -.- Anscheinend wird das entprechende Event nicht gefeuert… kann man irgendwie prüfen, welche Events gefeuert wurden? (oder sieht jemand spontan meinen Denkfehler? ) “OnPostDispatch” tuts anstandslos… Ich habe nach jeder Änderung bei den Eventlistenern das Modul jeweils neuinstalliert und den Cache sicherheitshalber auch mal komplett geleert. Falls jemand sachdienliche Hinweise hat, immer her damit
Hast du das Plugin neu installiert? Wenn du neue Events hinzufügst - muss das Plugin ja einmal de- und neuinstalliert werden. Formal kann ich da keinen Fehler feststellen.
Jep, mittlerweile sogar einmal übers Backend komplett gelöscht und (per ftp) wieder hochgeladen, dann wieder installiert (und aktiviert). Ändert aber auch nix. Naja, irgendwo werde ich da wohl nen Bock geschossen haben - freut mich aber, dass ichs formal erstmal gerafft habe
Du kannst ansonsten mal in der Tabelle s_core_subscribes schauen, ob dein Event dort überhaupt eingetragen worden ist! Wie probierst du denn den Controller aufzrufen im Frontend?
Jetzt bekomme ich wahrscheinlich schläge *g* Im Frontend habe ich: {block name='frontend\_index\_MeinPlugin'}{/block}
stehen. Muss ich dorten das Template auch nochmal includen? Hatte mir das so vom Facebookplugin abgeschaut - und „ich meine, das hat auch mal funktioniert“ ™. Im Template für das Plugin hab ich dann analog dazu: [code] {block name=‚frontend_index_MeinPlugin‘ append}
Mein tolles, nichtfunktionierendes Plugin
{/block} [/code] Der Event ist übrigens in der Tabelle eingetragen…
Hallo, versuche doch einmal deinen Controller direkt aufzurufen, also so: http://meinshop.de/MeinPlugin Gruß, Patrick :shopware:
Ah, jetzt ja - also wenn ich den Controller direkt aufrufe, wird der Event ausgelöst, der Controller geladen und … eine Fehlermeldung angezeigt, dass der Parameter „Template“ doch bitteschön eine Instanz von „Enlight_Template_Template“ sein soll. Ersetze ich im Controller $this->View()->setTemplate(’/pfad/zum/template.tpl); durch $this->View()->loadTemplate(’/pfad/zum/template.tpl’); ist der Fehler aber auch Geschichte.