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