[GELÖST] Eigenes Einkaufswelten-Element erstellen: MediaWidget

Hallo liebe Shopware-Gemeinde,

ich versuche mich gerade an der Plugin-Entwicklung und habe testweise erst einmal mit den Beispiel-Plugins begonnen: das Vimeo-Plugin hat super funktioniert (http://community.shopware.com/_detail_1 … 1398668135).

Das MediaWidget habe ich auch runtergeladen (http://community.shopware.com/files/dow … 591598.zip). Installiere ich dieses und platziere das Element in einer Einkaufswelt (Shopware 5), öffnet er das EInkaufswelten-Element nicht und Firebug wirft folgende Meldung:
TypeError: k is undefined (…/engine/Library/ExtJs/ext-all.js?201507160826) --> …n=0,p=o.length;n

r=t.to;if(k===s||k.substring(0,s.length)…

Hat jemand eine Idee, woran das genau liegen kann? Den Code des Plugins habe ich natürlich auch durchgearbeitet, kann in der media_widget.js aber auch keinen wirklichen Fehler entdecken:

 Ext.define('Shopware.apps.Emotion.view.components.MediaWidget', { extend: 'Shopware.apps.Emotion.view.components.Base', alias: 'widget.emotion-media-widget', initComponent: function() { var me = this; me.callParent(arguments); me.createMediaManagerField(); me.createMediaWidgetFieldset(); me.mediaManagerStoreField = me.getMediaStoreField(); me.add(me.widgetFieldset); }, createMediaManagerField: function() { var me = this; return me.mediaManagerField = Ext.create('Shopware.form.field.MediaSelection', { buttonText: '{s name=emotion/component/media\_widget/media/button\_text}Select a file{/s}', listeners: { scope: this, selectMedia: me.onMediaSelection } }); }, createMediaWidgetFieldset: function() { var me = this; return me.widgetFieldset = Ext.create('Ext.form.FieldSet', { title: '{s name=emotion/component/media\_widget/fieldset/title}Media Widget Settings{/s}', layout: 'anchor', defaults: { anchor: '100%' }, items: [me.mediaManagerField] }); }, onMediaSelection: function(field, records) { var me = this, cache = []; Ext.each(records, function(record) { cache.push(record.data); }); me.mediaManagerStoreField.setValue(Ext.JSON.encode(cache)); }, getMediaStoreField: function() { var me = this, items = me.elementFieldset.items.items, storeField; Ext.each(items, function(item) { if(item.name === 'media\_widget\_store') { storeField = item; } }); return storeField; } }); 

Die Bootstrap.php - Datei enthält folgenden Inhalt:

 class Shopware\_Plugins\_Backend\_MediaWidget\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public $component; public function getInfo() { return array( 'version' =\> $this-\>getVersion(), 'label' =\> $this-\>getLabel(), 'link' =\> '[http://wiki.shopware.de'](http://wiki.shopware.de'), 'description' =\> 'An emotion element example plugin with custom ExtJS component.' ); } public function getLabel() { return 'Media Widget'; } public function getVersion() { return "1.0.0"; } public function install() { $this-\>component = $this-\>createComponent(); $this-\>createComponentFields(); $this-\>registerEvents(); return true; } public function uninstall() { return true; } public function createComponent() { return $this-\>createEmotionComponent(array( 'name' =\> 'Media Widget', 'xtype' =\> 'emotion-media-widget', 'template' =\> 'emotion\_media', 'cls' =\> 'emotion-media-widget', 'description' =\> 'An emotion element example plugin with custom ExtJS component.' )); } public function createComponentFields() { $this-\>component-\>createHiddenField(array( 'name' =\> 'media\_widget\_store', 'allowBlank' =\> true )); } public function registerEvents() { $this-\>subscribeEvent( 'Shopware\_Controllers\_Widgets\_Emotion\_AddElement', 'onEmotionAddElement' ); $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatchSecure\_Widgets\_Campaign', 'extendsEmotionTemplates' ); } public function onEmotionAddElement(Enlight\_Event\_EventArgs $arguments) { $data = $arguments-\>getReturn(); $files = array(); if (isset($data['media\_widget\_store']) && !empty($data['media\_widget\_store'])) { $files = json\_decode($data['media\_widget\_store'], true); } $data['files'] = $files; return $data; } } 

Beste Grüße

Sebastian

Hallo, da ich zwischenzeitlich auf die Shopware-Version 5.0.3 geupdatet habe und das Plugin dort erneut aktiviert habe, funktioniert es nun, die Fehlermeldung erscheint nicht mehr (ohne das ich etwas am Code oder der Datenbank geändert habe). Scheint wohl im neuen Update behoben worden zu sein. Beste Grüße Sebastian

Hallo Zusammen, ich hab das gleiche Problem, allerdings in Version 5.1.0. Bei mir kommt die Fehlermeldung in der JS Console: “Uncaught TypeError: Cannot read property ‘substring’ of undefined” Hat jemand eine Idee? grüße, Cat.

Ok, einmal Cache leeren, Backend neu laden, Element in der Einkaufswelt löschen und neu erstellen hilft :slight_smile: Grüße, Cat.