Hallo! Ich habe ein Backend-Plugin entwickelt, was das Artikeldetails-Fenster um einen zusätzlichen Tab erweitert. In dem Tab kann unser Kunde zusätzlich beliebig viele Felder hinzufügen, um weitere Informationen zu einem Artikel zu hinterlegen (Koordinaten für den Druck, zusätzliche Vorschaubilder, usw.). Ich habe bereits folgende Seiten zu dem Thema gelesen: [list] [*]http://forum.shopware.com/programmierung-f56/nach-artikel-speichern-eigene-plugin-funktion-ausfuhren-t20622.html[/*] [*]http://wiki.shopware.com/Fortgeschritten-Artikelmodul-Bestelluebersicht_detail_1071.html[/*][/list] Soweit ist auch alles klar und das Prinzip funktioniert. Nur eine Sache verstehe ich nicht: Wenn ich per onPostDispatchBackendArticle die save-Action abgefangen habe, was muss ich dann machen, um auch dem Backend-Script mitzuteilen, dass er die zusätzlichen Felder zu der (neuen) Artikel-ID speichern soll? Also kurz gesagt: Wie teile ich dem Backend-ExtJS-Script mit, dass er jetzt die zusätzlichen Daten des Artikelfensters / -tabs zur Artikel-ID 123 speichern soll? Ich dachte ja an sowas wie public function onPostDispatchBackendArticle(Enlight\_Event\_EventArgs $args) { // ... if ($args-\>getRequest()-\>getActionName() === 'save') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/article/ccb\_kfp/controller/save.js' ); } // ...
… Aber irgendwie “fühlt” sich das nicht richtig an. Und da weiss das Script ja immernoch nichts von der Artikel-ID. Wie würde man das richtig umsetzen? Vielen Dank! Mario
Sorry, wenn ich nerve. Aber das Thema brennt hier leider. Hat niemand eine Idee / Vorschlag? Gibt es im Backend-Script (ExtJS) keinen Event / Listener, den man überschreiben / umbiegen kann, der nach dem Speichern gefeuert wird und mir einfach nur die Artikel-ID übergibt? Das würde mir schon reichen.
Ok, ich habe eine Lösung. Allerdings scheint es da auch einen “Bug” in den Shopware-Artikel-Scripten zu geben. Wenn ich mich durch den Backend-Code vom Shopware-Core wühle, sehe ich, dass im Ordner /templates/_default/backend/article/controller/detail.js das Speichern des Artikels gehandelt wird: [i]onSaveArticle: function(win, article, options) { … }[/i] In der Funktion gibt es auch einen Handler für den success-Event nach article.save. In diesem Code sehe ich, dass ein options.callback gefeuert wird, sofern diese mit einer Funktion belegt ist: if (options !== Ext.undefined && options !== null && Ext.isFunction(options.callback)) { options.callback(newArticle, true); }
Weiter “oben” sehe ich auch, wie dieser Event ausgelöst wird: // /templates/\_default/backend/article/view/detail/window.js //create the save button which fire the save event, the save event is handled in the detail controller. me.saveButton = Ext.create('Ext.button.Button', { cls:'primary', name: 'save-article-button', text: me.snippets.save, handler: function() { me.fireEvent('saveArticle', me, me.article); } });
Dem Trigger werden zwei Parameter übergeben, me und me.article. Jedoch kein options-Parameter, wodurch die Funktion options.callback nicht belegt ist und somit auch niemals ausgelöst wird. Wenn ich den Core-Code so anpasse, funktioniert es:// /templates/\_default/backend/article/view/detail/window.js // ... initComponent:function () { var me = this; me.articleOptions = new Object; // ... } createToolbar: function() { var me = this; //create the save button which fire the save event, the save event is handled in the detail controller. me.saveButton = Ext.create('Ext.button.Button', { cls:'primary', name: 'save-article-button', text: me.snippets.save, handler: function() { me.fireEvent('saveArticle', me, me.article, me.articleOptions); } }); // Mein Code: /engine/Shopware/Plugins/Local/Backend/.../Views/backend/article/.../view/window.js // ... activate: function () { console.log(me); me.articleOptions.callback = function(article, success) { console.log('\*\*\*\* Article Options Callback fired'); console.log(article); } // ...
So wird die Callback gefeuert und ich kann von da aus dann das Speichern der Zusatzinfos handeln. Es wäre schön, wenn sich ein Shopware-Entwickler hierzu äußern könnte. Ich finde, dass es ein Bug ist, wenn der saveArticle-Funktion kein Options-Parameter übergeben wird und man von “aussen” somit keinerlei Möglichkeiten hat, über das Speichern benachrichtigt zu werden. Oder wie habt ihr euch das gedacht?