Backend-Widgets

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“