Hallo zusammen, ich sitze seit einigen Tagen an der Aufgabe ein eigenes Shopware Backend Plugin/ Modul zu schreiben. Dazu habe ich auch schon verschiedene Tutorials durchgearbeitet. Momentan erweitere ich die Kunden-Detail Ansicht und habe auch schon erfolgreich einen neuen Tab erzeugt. Mein Problem ist, dass offenbar der Modul eigene Controller nicht registriert wird. Getreu nach Vorbild steht in meiner Bootstrap.php unter Anderem: public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Backend\_Customer', 'onPostDispatchCustomer'); $this-\>subscribeEvent('Enlight\_Controller\_Dispatcher\_ControllerPath\_Backend\_Meins,'onEnlightControllerDispatcherControllerPathBackendMeins'); return true; } public function onEnlightControllerDispatcherControllerPathBackendMeins(Enlight\_Event\_EventArgs $arguments){ error\_log(\_\_METHOD\_\_."\r\n",3, $this-\>Path().'logging.log'); $this-\>Application()-\>Template()-\>addTemplateDir($this-\>Path() . 'Views/'); return $this-\>Path() . 'Controllers/Backend/Meins.php'; }
Meine Controller Klasse liegt in engine/Shopware/Plugins/Local/Backend/Meins/Controllers/Backend/Meins.php und heißt Shopware_Controllers_Backend_Meins Natürlich möchte ich die Controller Funktionen ausführen lassen, die im Model aufgerufen werden. Allerdings scheint es bereits bei der Registrierung zu scheitern. Das error_log wie oben beschrieben, schlägt nämlich nicht an. Wann soll das Controller Dispatcher Event getriggert werden? ISt der Aufbau korrekt? Oder liegt vielleicht ein ganz anderes Verständnisproblem vor? Für Hilfe und Anregungen bin ich dankbar, mfG
Man sollte versuche den Controller erstmal direkt über den Browser aufzurufen. Dir URL wäre: http://shop.tld/backend/Meins Wenn die indexAction() des Controllers aufgerufen wird, dann ist der Controller richtig eingebunden.
Guter Tipp, danke dafür. Mit Hilfe des GET Parameters kann ich so zumindest auch die anderen Controller Funktionen testen. Der Controller wird also offenbar eingebunden, denn der Aufruf im browser funktioniert. Womöglich habe ich also woanders einen Fehler. Das Grundproblem besteht darin, dass die Daten, die ich mit Hilfe des controllers aus der Datenbank auslese, nicht in der View (also meinem neuen Tabulator) angezeigt werden. Normalerweise sollte doch das Model über den Proxy, die Controller-Funktion aufrufen proxy: type:'ajax', api:{read:'url controller="Meins" action="meineControllerFunktion"'}, reader...
Im Controller taucht dann die Funktion meineControllerFunktionAction() auf, die die Datenbank ausliest. Die ausgelesenen Felder (z.B. firstname) sollten dann im Model gespeichert werden fields:[{name:'firstname',type:'string}]
und entsprechend in der View auslesbar sein initComponent: function() { var me = this; me.items = [{anchor:'95%}, xtype:'displayfield', fieldLabel:'Vorname', name: 'firstname', id: 'id\_firstname'] me.callParent(arguments); }
Das Feld wird erzeugt, das label ist richtig, nur der Wert taucht eben nicht auf.
Hallo knitzie, sieht das bei dir wirklich so aus? api:{read:'url controller="Meins" action="meineControllerFunktion"'}
Versuch es dann mal damit: api:{read:'{url controller="Meins" action="meineControllerFunktion"}'}
Du hast in deinem Beispiel die geschweiften Klammern vergessen. Vielleicht hilft dir das schon. Gruß, Patrick :shopware:
Hi Patrick, das war wohl ein Tippfehler hier im Forum. In meinem Code sieht es so aus, wie du korrigierend vorgeschlagen hast. Das ist also nicht das Problem. Ich werde es heute nochmal mit einem neuen Modul versuchen. Wenn es kein Verständnisproblem ist, dann sollte der Fehler ja findbar sein.