Hi, ist das Problem bei euch noch akkut? Ich habe das mal nachgebaut, da scheint es mir keine grundsätzlichen Probleme zu geben. 1) Widget installieren (install() des Plugins) public function createWidget() { $widget = new Shopware\Models\Widget\Widget(); $widget-\>setLabel('Custom Widget'); $widget-\>setName('my-widget'); $this-\>Application()-\>Models()-\>persist($widget); $this-\>Application()-\>Models()-\>flush(); }
2) Backend erweitern. Event: ‚Enlight_Controller_Action_PostDispatch_Backend_Index‘ => ‚extendsBackend‘ public function extendsBackend(\Enlight\_Event\_EventArgs $args) { $this-\>bootstrap-\>registerMyTemplateDir(); $this-\>bootstrap-\>registerMySnippets(); /\*\* @var \Enlight\_Controller\_Action $controller \*/ $controller = $args-\>getSubject(); if ($controller-\>Request()-\>getActionName() != 'load') { return; } $controller-\>View()-\>extendsTemplate('backend/swag\_custom\_widget/index/widgets/my\_custom\_widget.js'); }
3) Eigenes Widget erzeugen: Besonderheit ist hier eigentlich nur, dass ich mich an einen den visitor-Block hänge, weil ich da weiß, dass Shopware.apps.Index.view.widgets.Base schon vorhanden ist. //{block name="backend/index/view/widgets/visitors" append} Ext.define('Shopware.apps.SwagCustomWidget.index.widgets.myCustomWidget', { extend: 'Shopware.apps.Index.view.widgets.Base', alias: 'widget.my-widget', layout: 'fit', initComponent: function() { var me = this; me.items = me.getItems(); me.callParent(arguments); }, getItems: function() { var me = this; return [{ xtype: 'grid', store: me.getBackendUserStore(), viewConfig: { hideLoadingMsg: true }, border: 0, columns: [{ dataIndex: 'username', header: 'Name', flex: 1 },{ dataIndex: 'lastlogin', header: 'Logged in since', flex: 1 }] }]; }, getBackendUserStore: function() { var me = this; return Ext.create('Ext.data.Store', { fields: [{ name: 'id', type: 'integer' }, { name: 'username', type: 'string' }, { name: 'lastlogin', type: 'date' },], proxy: { type: 'ajax', url: '{url controller=MyWidget action=loadBackendUser}', reader: { type: 'json', root: 'data' } }, autoLoad: true }); } }); //{/block}
4) Eigenen Controller registrieren und Daten für den Store laden (spare ich mir, sollte ja Standard sein) Es könnte da sicher noch ein paar bessere Blöcke geben - aber so vom Prinzip sollte das erstmal gehen. lG Daniel
1 „Gefällt mir“