Hallo erstmal, ich arbeite gerade an meinem ersten komplexeren Einkaufswelt Element. Das Ziel ist es, eine Art erweiterten eigenen Slider zu programmieren. Deshalb soll es möglich sein im Formular des Einkaufswelt Elementes eine beliebige Anzahl von Elementen ( mit Bild, Text, usw. ), die dann durch den Slider am Frontend gewechselt werden, anzulegen. Als Grundlage habe ich das Tutorial bzw. den Beispielcode ( *.zip ) aus Experten - Eigene Einkaufswelten-Elemente erstellen, http://wiki.shopware.de/_detail_959.html verwendet. Das Problem :(: beim Doppelklick ( bzw. Klick auf das Bleistift Icon ) des Elementes in der Einkaufswelt öffnet sich das Fenster nicht. Das selbige Problem konnte ich auch bei der Installation des Beispielplugins ( aus dem Tutorial ) feststellen. Das Problem scheint mit dem s_library_component_field mit x_type: json zu liegen. Sobald ich es in der Bootstrap.php install() Methode entferne wird das Dialogfenster meines Elementes geöffnet. Weitere Hinweise: es werden auch keine JS Fehler oder sonstiges geworfen. Es ist gut möglich, dass es sich bei der ganzen Sache um einen Fehler meinerseits handelt, da ich noch Shopware4 Beginner bin.
Hallo, leider kann ich nicht helfen, da ich genau das selbe Problem habe. Allerdings bekomm ich es nicht mal hin das ein Dialog Fenster aufgeht. Hast du evt. die Codezeile die in der s_library_component_field eingetragen wird. Würde gern mal testen ob damit bei mir zumindest ein Konfigurationsfenster aufgeht. Danke
Hat sich erledigt. Hab ein Tutorial gefunden und konnte so den Fehler finden.
Hinweis auf das Tutorial wäre Super, damit auch anderen geholfen ist! Gesendet von meinem iPhone mit Tapatalk
Ich konnte an meinem Plugin noch immer nicht weiterarbeiten, da ich noch immer bei folgendem Problem hänge: Bei einem s_library_component_field Feld mit x_type: hidden value_type: json wird das Dialogfenster meines Elementes in der Einkaufswelt nicht geöffnet. Als Grundlage verwende ich das Beispielplugin http://wiki.shopware.de/files/downloads … 596734.zip aus dem Tutorial ( http://wiki.shopware.de/Experten-Eigene … l_959.html ) verwendet. Hat jemand von euch einen Tip für mich? Gerne kann ich auch etwas mehr Code meines Plugin Setups zur Verfügung stellen.
Ne das war es nicht. Das hat mir am Anfang ein wenig geholfen aber hier ist das Plugin SwagCustomEmotionElement Dort hast du ein laufendes Element und kannst im Code schauen. Da hat mir geholfen aber hänge jetzt an der $Data Variable im Template… Hoffe das hilft euch weiter
Hallo, generell zur Info, wie es ab Shopware 4.2 geht http://wiki.shopware.de/_detail_1459.html Viele Grüße Sebastian
Zu der $Data Variable und wie man sie ins Template bekommt steht übrigens hier $Data Variable Jetzt läuft es
[quote=“Almare”]Ne das war es nicht. Das hat mir am Anfang ein wenig geholfen aber hier ist das Plugin SwagCustomEmotionElement Dort hast du ein laufendes Element und kannst im Code schauen. Da hat mir geholfen aber hänge jetzt an der $Data Variable im Template… Hoffe das hilft euch weiter[/quote] Soweit ich nun gesehen habe scheinen die beiden Beispielplugin, den gleichen Inhalt zu haben Danke trotzdem für deinen Hinweis, dein Hinweis hat mich zur Lösung meines ursprünglichen Problems geführt: 1. Ich hatte die Dateistruktur der ExtJS Komponente irgendwie von einem falschen Beispiel verwendet 2. Folgender Event Listener hat mir gefehlt: $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Emotion', 'onPostDispatchBackendEmotion' );
3. Beim hinzufügen des s_library_component_field Eintrages hatte ich einen Fehler array( 'name'=\> 'q2e\_slider', 'field\_label'=\> '', 'x\_type'=\> 'hidden', // war ursprünglich auf "json" 'value\_type'=\> 'json', // war ursprünglich auf "hidden" 'default\_value' =\> '', 'allow\_blank'=\> '0', ),
Vielleicht helfen dem ein oder anderem ja meine Fehler weiter. Ich würde diesen Thread noch gerne offen lassen, sollte noch weitere Fragen, die sich nicht durch die Suche im Forum lösen lassen, auftauchen. Ist das okay, oder sollte ich diesen Thread als gelöst markieren?
Hallo liebe Community, nachdem ich nun schon einige Fortschritte mit meinem Plugin gemacht habe, stellt mich die Implementierung am Backend nach wie vor auf eine harte Probe. Deshalb wollte ich eine Grundsätzliche Frage an euch stellen, die für Shopware PROs wahrscheinlich leicht zu beantworten sein wird. Wenn ich ein Einkaufswelten Element ( Component ) mit einem Feld ( Element ) array( 'name'=\> 'q2e\_slider', 'field\_label'=\> '', 'x\_type'=\> 'hidden', 'value\_type'=\> 'json', 'default\_value' =\> '', 'allow\_blank'=\> '0', )
erstelle, muss ich dann meinen eigenen Backend Controller zum Speichern der Daten machen??? ODER kann ich eine Lösung wie beim Shopware Core Banner-Slider Element implementieren??? Zur Info meine Erkenntnisse: Der Banner-Slider ExtJS Cmponente speichert die Werte aus dem Grid ( die einzelenen Banner Elemente ) in einem ‘mapping’ Feld: // /shopware/templates/\_default/backend/emotion/view/components/banner\_slider.js /\*\* \* Refreshes the mapping field in the model \* which contains all banners in the grid. \* \* @public \* @return void \*/ refreshHiddenValue: function() { var me = this, store = me.bannerStore, cache = []; store.each(function(item) { cache.push(item.data); }); var record = me.getSettings('record'); record.set('mapping', cache); },
Dannach werden im Emotion Detail ExtJS Controller, diese gespeicherten Mapping Daten ( JSON Model Daten ) statt des Feldwertes ausgelesen: // /shopware/templates/\_default/backend/emotion/controller/detail.js getFieldData: function(field, record) { .... } else if(field.getName() === 'banner\_slider') { return { id: field.fieldId, type: field.valueType, key: field.getName(), value: record.get('mapping') }; } ...
Kann man das auch selbst implementieren?
Vielleicht interessiert ja den ein oder anderen meine Lösung des Problemes. Vorab möchte ich anmerken, dass es sich dabei sicherlich nicht um eine saubere Lösung handelt. Mir fehlte jedoch die Zeit, alleine eine bessere Lösung zu finden, und hier im Forum ist auch nichts dazu gekommen. Beim Erstellen der Felder der Einkaufswelt Elemente in der Tabelle s_library_component_field verwende ich ... array( 'name'=\> 'banner\_slider', 'field\_label'=\> '', 'x\_type'=\> 'hidden', 'value\_type'=\> 'json', 'default\_value' =\> '', 'allow\_blank'=\> '0', ), ...
Da das Feld den Namen banner_slider hat, funktioniert das Speichern der Daten des Einkaufswelt Elementes aus dem Grid wie auch beim Shopware Slider Plugin. Die Verarbeitung der Daten kann aus /shopware/templates/_default/backend/emotion/view/components/banner_slider.js übernommen werden. Das Skript, dass den „magischen“ Part ( der für den Slider programmiert wurde ) übernimmt, findet ihr unter /shopware/templates/_default/backend/emotion/controller/detail.js. Er verarbeitet dann die JSON Daten eures Plugins. EDIT: Natürlich würde ich mich zu allen Informationen für eine besserere und vor allem sauberere Lösung dieses Problems freuen.
Hi, ich bin heute auf das gleiche Problem gestoßen. Deine Frage liegt zwar schon etwas in der Vergangenheit, aber für zukünftige Referenzen hier einmal mein Lösungsansatz: Ich habe es jetzt so gelöst, dass ich ein Override auf die Methode „getFieldData“ des Emotion-Detail-Controllers schreibe. Also etwa so in der Art: //{block name="backend/emotion/controller/test\_detail"} //{namespace name=backend/emotion/controller} Ext.define('Shopware.apps.Emotion.controller.Test\_Detail', { /\*\* \* Defines an override applied to a class. \* @string \*/ override: 'Shopware.apps.Emotion.controller.Detail', getFieldData: function(field, record) { var parentReturn = this.callParent(arguments); if(field.getName() === 'my\_hidden\_field') { parentReturn.value = record.get('mapping'); } return parentReturn; } }); //{/block}
Danach wird beim Speichern dann bei meinem Feld genauso wie bei z.B. „banner_slider“ der Wert aus dem „mapping“-Feld geholt.