[gelöst] im backend s_order_details_attributes anzeigen?

hallo, ich befülle bei jeder position einer bestellung z.b s_order_details_attributes.attribute5 mit daten. nun möchte ich im backend das dieses attribut auch bei den einzel-positionen einer bestllung angezeigt wird. im default template befindet sich eine model/position_attribute.js. wie bzw. wo wird die aufgerufen? oder muss ich hier zur anzeige vorgehen wie in dem (nicht mehr existenten) schuhgrößen-backend-plugin-demo ?

hi, ich habe leider keine Lösung für dein Problem. Ich würde aber gern wissen, wie du das Feld in der Datenbank füllst. Ich würde gern bei jeder Bestellung Daten aus dem Checkout-Formular in s_order_attributes speichern. Die Felder aus dieser Tabelle werden ja im Backend in der Bestellung als Freitextfelder ausgegeben. Ich habe es aber bis jetzt noch nicht geschafft, Die Daten aus dem Formular in die Tabelle zu schreiben. Hast du hier einen Tipp für mich? vielen grüße, H.

klink dich doch per hook an Shopware_Controllers_Frontend_Checkout::saveOrder::after an. da hast du alles was du brauchst um s_order_attributes zu schreiben.

nochmal zu meinem problem: ich habe in backend/order/view/detail/position.js die funktion getColumns() um eine neue spalte erweitert. die wird auch angezeigt, aber ohne inhalt obwohl die getListAction für jede position in attribute2 etwas liefert: attribute":{"id":9,"attribute1":"","attribute2":"BLABLA","attribute3":"","attribute4":"","attribute5":"","attribute6":"","orderDetailId":212}} welchen dataIndex muss ich für die spalte angeben? ich habe folgendes ohne erfolg probiert: dataIndex: "getAttributes.attribute2", dataIndex: "getAttributes().attribute2", dataIndex: "attribute.attribute2", dataIndex: "attributes.attribute2", dataIndex: "attribute2",

Hast du auch schon dataIndex: "attribute[attribute2]" getestet? So ähnlich funktioniert es bei den Artikeldetails (article/view/details/settings.js).

danke für den hinweis. ich habe nun auch dataIndex: "attribute[attribute2]", dataIndex: "attributes[attribute2]", dataIndex: "getAttributes[attribute2]" erfolglos probiert. auch versuche ich über einen renderer an die daten zu kommen: renderer: function(value, metaData, rowRecord) { // console.log (value, metaData, rowRecord); console.log (rowRecord.getAttributes()); console.log (rowRecord.getAttributes().attribute2); console.log (rowRecord.getAttributes()['attribute2']); console.log (rowRecord.getAttributes().load()); } auch ohne erfolg. der letzte log schmeisst auch einen js fehler … },

Bist du mittlerweile schon weiter gekommen? Ich vermute das hier irgendwo ein tiefer liegender Fehler ist, da ich jetzt an mehreren Stellen (z.B. hier) gelesen habe. dass attribute[attrName]die richtige Syntax ist.

naja, ich habe mich in den entsprechenden backendcontroller eingeklinkt und liefer s_order_details_attributes.attribute2 unter anderem namen direkt als attribut einer order. das lässt sich dann auch ansprechen :stuck_out_tongue:

Hallo zusammen, hier eine Lösung für euer Problem: { header: 'Attribute 5', dataIndex: 'detailAttribute.attribute5', flex: 1, renderer: function(value, metaData, record) { if (record && record.getAttributes() instanceof Ext.data.Store && record.getAttributes().getCount() \> 0) { var attr = record.getAttributes().first(); return attr.get('attribute5'); } else { return ''; } } }, Kurze Erklärung: ExtJs Grids können standardmäßig nicht mit verschachtelten Daten arbeiten. Daher wird hier mit einem ColumnRenderer gearbeitet. In der Renderer Funktion wird dann einfach auf den Attribute Store zugegriffen und der attribtue5 Wert des ersten Models zurück gegeben. Hoffe das hilft euch weiter Mit freundlichen Grüßen Oliver Denter

1 „Gefällt mir“

wow, vielen dank! da wäre ich im leben nicht drauf gekommen das so zu coden :slight_smile: probiere ich morgen gleich mal aus.

[quote=„Oliver Denter“] ExtJs Grids können standardmäßig nicht mit verschachtelten Daten arbeiten. Daher wird hier mit einem ColumnRenderer gearbeitet. In der Renderer Funktion wird dann einfach auf den Attribute Store zugegriffen und der attribtue5 Wert des ersten Models zurück gegeben. [/quote] Hallo, ich hänge hier an einem ähnlichen Problem. Ich habe die s_order_details_attributes um ein eigenes Attribut erweitert und möchte es im Grid bei den Bestellpositionen anzeigen. Das funktioniert auch mit obigen Tip mit dem Renderer, allerdings lässt sich der Wert dann nicht im Grid bearbeiten. Gibt es hier auch noch die Möglichkeit einen getter/setter zu schreiben, so dass der RowEditor das eigene Attribut übernimmt? Ich habe auch schon versucht, das Model in Order/Position mit einem Mapping zu erweitern: //{block name="backend/order/model/position/fields" append} { name: 'myAttrib', type: 'float', mapping: 'attribute.myAttrib' }, //{/block} Jetzt wird zwar der Wert richtig in der Spalte und im Editor angezeigt, er wird aber trotzdem nicht gespeichert. Hat jemand einen Tip? Grüße kapeha

[quote=“Oliver Denter”]Hallo zusammen, hier eine Lösung für euer Problem: { header: 'Attribute 5', dataIndex: 'detailAttribute.attribute5', flex: 1, renderer: function(value, metaData, record) { if (record && record.getAttributes() instanceof Ext.data.Store && record.getAttributes().getCount() \> 0) { var attr = record.getAttributes().first(); return attr.get('attribute5'); } else { return ''; } } }, Kurze Erklärung: ExtJs Grids können standardmäßig nicht mit verschachtelten Daten arbeiten. Daher wird hier mit einem ColumnRenderer gearbeitet. In der Renderer Funktion wird dann einfach auf den Attribute Store zugegriffen und der attribtue5 Wert des ersten Models zurück gegeben. Hoffe das hilft euch weiter Mit freundlichen Grüßen Oliver Denter[/quote] Also bei mir funktioniert dies leider nicht. Ich habe eine Bestellung wo in der Tabelle s_order_details_attributes das Feld attribute5 befüllt ist. Wenn ich in die Datei /backend/order/view/detail/position.js die Spalte nach dieser Vorgabe einbinde, bleibt das Feld der Bestellung leer. Sind noch in anderen JS-Dateien Anpassungen notwendig? Das Vorgehen mit record.getAttributes().first() ist für mich auch nicht wirklich schlüssig - die Attribut-Relation ist ja eigentlich ein 1:1-Relation also pro Order-Detail gibt es einen Eintrag in der Order-Detail-Attributes. Danke für Eure Hilfe, Rafael Kutscha

*PUSH*

Hat denn niemand eine Lösung oder einen anderen Ansatz? Es muss doch irgendwie möglich sein, die Attribute der Bestellpositionne in Shopware auszulesen?

*PUSH*

Hallo zusammen, ich kann mir beim besten Willen nicht vorstellen, dass es vorher bei jemanden funktioniert hat - nach sehr langer Suche habe ich auf GIT herausgefunden, dass es ein Fehler in Shopware war, der erst vor wenigen Tagen behoben worden ist und somit noch nicht in einer offiziellen Version enthalten sein kann. Details: SW-5110 fix order position attribute association Ich hoffe diese Information hilft noch jemandem, der auch an der besagten Stelle hängt. Falls jemand Fragen zu dem Thema hat so kann er sich gerne per PM an mich wenden - nach der Tortur bin ich nun Experte was Order-Detail-Attributes angeht. Grüße, Rafael Kutscha

[quote]Das funktioniert auch mit obigen Tip mit dem Renderer, allerdings lässt sich der Wert dann nicht im Grid bearbeiten.[/quote] Das selbe Problem habe ich auch gerade. Mein eigenes Attribut wird angezeigt, aber es wird nicht gespeichert. Kann jemand bitte aufzählen was denn überhaupt dafür notwendig ist um die eigenen Attribute zu editieren?

Hat jemand hierfür schon eine Lösung gefunden. Danke vorab.