Backend-Modul erweitern -EXTJS Controller wird nicht geladen

Hallo Shopware, ich versuche gerade das Artikel-Backend-Mdoul zu erweitern. Und zwar soll hier ein neuer Tab mit einer Liste erstellt werden (Sieht am Ende ähnlich aus wie der Tab ESD). Der Tab wird mir auch angezeigt, auch die Liste, der Pager mit dem Laden der Daten funktioniert ebenso, allerdings funktionieren die Buttons Hinzufügen und Löschen nicht. Tests ergaben das mein eigener Controller unter /Plugin/Community/Core/MyPlugin/Views/backend/article/controller/my_controller.js nicht geladen wird. Habe mich daher im Forum etwas umgeschaut und eine alternative Methode gefunden wie man Backend-Module erweitern kann, leider tritt hier das gleiche Problem auf. Aktuell sieht es folgendermaßen aus: In der Bootstrap: $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article', 'loadBackendModule'); public function loadBackendModule(Enlight\_Event\_EventArgs $arguments) { $arguments-\>getSubject()-\>View()-\>addTemplateDir($this-\>Path() . 'Views/'); if($arguments-\>getRequest()-\>getActionName() === 'load') $arguments-\>getSubject()-\>View()-\>extendsTemplate('backend/article/controller/my\_controller.js'); if($arguments-\>getRequest()-\>getActionName() === 'index') $arguments-\>getSubject()-\>View()-\>extendsTemplate('backend/article/app.js'); } In der app.js: //{block name="backend/article/application" append} //{include file="backend/article/controller/my\_controller.js"} //{/block} *) Merkwürdigerweise kann ich hier sogar die Models, Stores, Views, etc. weglassen und sie werden dennoch korrekt geladen. Aber auch mit einfügen der Models, Stores, etc. funktioniert der Controller nicht. Un der Controller ist halt ein ganz normaler Controller … Wenn ich nun ein console.log in die init-Funktion des Controllers schreibe oder wo auch immer, so wird dies leider nicht ausgeführt. Allgemein gesagt kommen die ganzen me.fireEvent-Dinger nicht an, da irgendwie der Controller nicht geladen wird. Habe mich da z.b. unter anderem an das HowTo von Shopware gehalten was die ganze Sachlage betrifft (programmierung-f56/erweiterung-der-backend-bestelldetailansicht-t9192.html?hilit=backend%20controller%20erweitern), allerdings scheint der Benutzer hier dasselbe Controller-Erweitern Problem zu haben wie ich. Bzw. erweitere ich ja keinen vorhandenen Controller, sondern füge einen neuen hinzu. Gibt es zu dieser Thematik einen Bug oder ähnliches? Habe hier dazu auch auf die schnelle nichts im Jira gefunden. MfG

Ich bin schonmal ein Stückchen weiter. Der Controller wird zwar erfolgreich geladen (controller ist im Quelltext vorhanden), allerdings wird hier nicht automatisch die init-methode ausgeführt, um die me.control[…]-Events zu registrieren … Die Initialisierung des Controllers sollte doch eigentlich von Haus aus aufgerufen werden oder? MfG

Genau das Problem haben wir auch. Es wird alles bis auf den Controller initialisiert, daher können wir keine Events fangen. Hier unser Code: app.js: //{block name="backend/article/application" append} //{include file="backend/article/controller/myplugin.js"} //{include file="backend/article/view/myplugin/input.js"} //{/block} myplugin.js: //{namespace name=backend/article/view/main} //{block name="backend/article/controller/myplugin"} Ext.define('Shopware.apps.Article.controller.MyPlugin', { extend: 'Ext.app.Controller', init: function () { var me = this; me.control({ 'article-detail-window article-myplugin-input': { listItem: me.onListItemA }, 'article-myplugin-input': { listItem: me.onListItemB } }); me.callParent(arguments); }, onListItemA: function(form) { console.log('function:onListItemA'); console.log(form); }, onListItemB: function(form) { console.log('function:onListItemB'); console.log(form); } }); //{/block} Wenn wir den Controller manuell in der originalen App hinzufügen Ext.define('Shopware.apps.Article', { ... controllers: ['Main', 'Detail', 'Category', 'Media', 'Variant', 'Esd', 'Statistic', 'MyPlugin'], ... } wird zumindest das zweite Event (onListItemB) gefangen. Aber es ist ja nicht Sinn der Sache, dass man in der Original-App rumwerkeln muss. Wäre schön, wenn jemand erklären würde, wie man einen Controller nachträglich registrieren kann.

2 Likes

Ich möchte dieses Problem nochmal aufgreifen. Ich stehe leider gerade genau vor der selben Situation. Gibt es bisland eine lösung dafür? Mein aktueller Stand ist das zwar die views,stores,models und controller geladen werden. Aber der Controller nicht das ausführt was er sollte. ?@ :shopware:

Der Controller wird geladen indem man in mittels override einbindet. Beispiel //{namespace name="backend/meinplugin/article/view/main"} //{block name="backend/article/controller/MeinPlugin"} Ext.define('Shopware.apps.Article.controller.MeinPlugin', { /\*\* \* Extend from the standard ExtJS 4 controller \* @string \*/ override: 'Shopware.apps.Article.controller.Main', /\*\* \* A template method that is called when your application boots. \* It is called before the Application's launch function is executed \* so gives a hook point to run any code before your Viewport is created. \* \* @params - The main controller can handle a orderId parameter to open the order detail page directly \* @return void \*/ init:function () { var me = this; me.callOverridden(); } }); //{/block} So klappt es auch dann mit den Events.

1 Like