Hallo, ich will die Artikelliste im Backend um das Attr1 Feld erweitern. Ich habe das Model backend/article_list/model/list.js erweitert: { name: ‚attr1‘, type: ‚string‘ }, Und die View backend/article_list/view/main/grid.js Ich habe nun auch die neue Spalte aber ohne Daten. Ich blicke nicht, wo ich das Feld Attr1 bzw. attribute[attribute1]definiere, so dass es Clientseitig verfügbar ist! Theoretisch müsste ja der Store auf das Model zugreifen. Aber ich frag mich wie hier der richtige Syntax ist etc. Hat mir jmd einen Tipp? Danke EDIT: Ich muss natürlich den Backend Controller ArticleList erweitern. Nun geht es.
Jetzt hänge ich leider doch noch beim Update. Ich will natürlich aus dem Listing das Attr1 Feld speichern. $articleId = (int) $this-\>Request()-\>getParam('id'); $attr1 = $this-\>Request()-\>getPost('attr1'); $articleAttributes = Shopware()-\>Models()-\>getRepository('Shopware\Models\Attribute\Article')-\>findBy(array('articleDetailId' =\> $articleId)); $articleAttributes-\>setAttr1($attr1);
Der obere Teil passt soweit und klappt auch. Aber $articleAttributes->setAttr1($attr1) führt zu folgendem Fehler: Call to a member function setAttr1() on a non-object in /kunden/117539_78141/webseiten/shopwareV4/engine/Shopware/Controllers/Backend/ArticleList.php Warum? Edit: Gelöst. Es muss heißen findOneBy dann klappt es.
Zu früh gefreut Wenn ich die Änderungen direkt in deb Core Dateien habe funktioniert es. Nun wollte ich es über ein Plugin machen und woltle zuerst mal die Update Funktion des Feldes programmieren: public function postDispatchArticleList(Enlight\_Event\_EventArgs $args) { $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); //if the controller action name equals "load" we have to load all application components. if ($args-\>getRequest()-\>getActionName() === 'load') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/OttExtArtList/article\_list/model/list.js' ); $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/OttExtArtList/article\_list/view/main/grid.js' ); } if ($args-\>getRequest()-\>getActionName() === 'update') { $articleId = (int) $args-\>getRequest()-\>getParam('id'); $attr1 = $args-\>getRequest()-\>getParam('attr1'); $articleAttributes = Shopware()-\>Models()-\>getRepository('Shopware\Models\Attribute\Article')-\>findOneBy(array('articleDetailId' =\> $articleId)); $articleAttributes-\>setAttr1($attr1); } if ($args-\>getRequest()-\>getActionName() === 'list') { } }
Der Code beim Update wird ausgeführt, aber der Wert wird nicht übernommen. Hat jmd eine Idee? Edit: Oh man… Dies habe ich vergessen: Shopware()->Models()->flush();
Hallo Ottscho, vielen Dank für den Ansatz, ich bin Neuling mit Shopware und mich würde interessieren wie dein Controller/Filestruktur für das Plugin aussieht. Oder könntest du mir ansatzweise dieses Plugin welches das Attr1 als Spalte in der Artikelliste ergänzt mal zu Lernzwecken zur Verfügung stellen? mfg :thumbup:
Hiho, gibt es für diese Problem mittlerweile eine Lösung? Brauche das selbe allerdings mit einem bestimmten Wert für Saisons. Darüber hinaus wäre ein Filterung dieses Wertes in der Artikelliste angedacht damit man immer alle Artikel einer Saison sehen kann. Beste Grüße Philipp
Gibt es eine aktuelle Lösung für Shopware 5.1 Ich versuch das FreiAttribute attr20 erneut in ArticleList zu integrieren. Soweit so gut. Angezeigt wird es mir per: Backend/AddColumnsToArticlelist/Views/backend/additionalarticlelist/model/editable_column.js //{block name="backend/article\_list/model/editable\_column/fields" append} //{namespace name="backend/additionalarticlelist/main"} { name: 'attr20', type: 'string' }, //{/block}
AND: Backend/AddColumnsToArticlelist/Views/backend/additionalarticlelist/view/main/grid.js //{block name="backend/article\_list/view/main/grid" append} //{namespace name="backend/kaphingst/main"} Ext.define('Shopware.apps.ArticleList.view.main.Grid.additionalarticlelist.view.main.Grid', { /\*\* \* Defines an override applied to a class. \* @string \*/ override: 'Shopware.apps.ArticleList.view.main.Grid', /\*\* \* Overrides the getColumns function of the overridden ExtJs object \* and inserts two new columns \* @return \*/ getColumns: function() { var me = this; //var columns = me.callParent(arguments); var columns = me.callOverridden(arguments); var column1 = { header: '{s name=list/order}Order{/s}', renderer: me.columnRenderer, dataIndex: 'Attribute\_attr20', name: 'attr20', flex: 1, allowInGrid: true, type: 'integer', editable: true, editor: { width: 85, xtype: 'numberfield', allowBlank: true, keyNavEnabled: false, mouseWheelEnabled: false } }; columns = Ext.Array.insert( columns, columns.length - 1, [column1] ); return columns; }, columnRenderer: function(value, metaData, record) { return record.data.Attribute\_attr20; } }); //{/block}
Mein Problem: Wenn ich den GridRowEditor aktiviere kann ich Wert eintragen, es wird aber ein “Array” danach gespeichert?! Woher kommt das? Wie bekomme ich es hin, dass ich den Wert abspeichern kann. Es ist mir auch völlig unklar wie ich den Wert im ExtJS-Umfeld nennen soll: attr20, atribute[attr20] oder Attribute_attr20 … Eine Dokumentation darüber ist ja auch mal nett… Vielen Dank für konkrete Hilfe. Hier ist noch meine B