# Extjs Erweiterung des Resourcen-Tab

**URL:** <https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965>\
**Category:** Programmierung\
**Created:** [6. Juli 2016 um 10:49 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965 "2016-07-06T10:49:27Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![baal](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@baal](https://forum.shopware.com/u/baal)\
**Post date:** [6. Juli 2016 um 10:49 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/1 "2016-07-06T10:49:27Z")

</div>

Hallo zusammen,

ich versuche im Backend den Resourcen-Tab in den Artikeldetails zu erweitern. Konkret möchte ich ein zusätzliches Inputfeld nach dem Namen bei den Downloads integrieren.

Jedoch scheitere ich bereits an dem einfachen Überschreiben der entprechenden Extjs-Datei. Die Artikeldetails lassen sich bei aktiven Plugin nicht mehr öffnen.

**Auszug aus Bootstrap.php**

```
/**
 * Registers all necessary events and hooks.
 */
private function registerEvents()
{
    $this->subscribeEvent(
        'Enlight_Controller_Action_PostDispatch_Backend_Article',
        'onArticlePostDispatch'
    );
}

public function onArticlePostDispatch(Enlight_Event_EventArgs $args)
{
    $controller = $args->getSubject();
    $view = $controller->View();
    $request = $controller->Request();

    $view->addTemplateDir( __DIR__. '/Views');

    //if the controller action name equals "load" we have to load all application components
    if ($request->getActionName() === 'load') {
        $view->extendsTemplate('backend/shop_aware_resources/article/view/resources/downloads.js');
    }
}

```

**download.js**

```
//{block name="backend/article/view/resources/downloads"}
Ext.define('Shopware.apps.ShopAwareResources.article.view.resources.Downloads', {
    override: 'Shopware.apps.Article.view.resources.Downloads'
});
//{/block}

```

Um mögliche Fehlerquellen zu vermeiden, mache ich nur einen einfaches Überschreiben und implementiere zunächst noch nicht das zusätzliche Inputfeld. Doch schon das schlägt anscheinend fehl.

Ich bin über jede Hilfe dankbar, da ich schon set mehreren Tagen dran sitze und absolut ratlos bin.

---

<div class="post-metadata">

**Author:** ![baal](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@baal](https://forum.shopware.com/u/baal)\
**Post date:** [7. Juli 2016 um 10:36 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/2 "2016-07-07T10:36:41Z")

</div>

Ich hatte ein “append” vergessen.

**downloads.js**

```
//{block name="backend/article/view/resources/downloads" append}
Ext.define('Shopware.apps.ShopAwareResources.view.resources.Downloads', {
    override: 'Shopware.apps.Article.view.resources.Downloads'
});
//{/block}

```

Ich habe das Ganze um ein Inputfeld und das Zusatzattribut “ggShopIds” erweitert.

**download\_attribute.js**

```
//{block name="backend/article/model/download_attribute/fields" append}
    { name: 'ggShopIds', type: 'string' },
//{/block}

```

**downloads.js**

```
//{block name="backend/article/view/resources/downloads" append}
Ext.define('Shopware.apps.ShopAwareResources.view.resources.Downloads', {
    override: 'Shopware.apps.Article.view.resources.Downloads',

    /**
     * Creates the form panel for the download container.
     * @return Ext.form.Panel
     */
    createDownloadForm: function() {
        var me = this;

        me.downloadFormElements = me.callParent(arguments);

        var shopField = {
            xtype: 'textfield',
            name: 'attribute[ggShopIds]',
            fieldLabel: 'Shoplimitierung',
            allowBlank: true
        };

        me.downloadFormElements.insert(2, shopField);

        return me.downloadFormElements;
    },

    /**
     * Creates the grid for the already assigned article downloads
     * @return Ext.grid.Panel
     */
    createDownloadGrid: function() {
        var me = this;

        me.downloadGridElements = me.callParent(arguments);

        var column = Ext.create('Ext.grid.column.Column', {
            text: 'ShopLimitierung',
            dataIndex: 'attribute[ggShopIds]'
        });

        me.downloadGridElements.headerCt.insert(
            me.downloadGridElements.columns.length - 1, // that's index column
            column
        );

        return me.downloadGridElements;
    }
});
//{/block}

```

Leider wird das Zusatzattrbut “ggShopIds” weder gespeichert noch im Grid angezeigt.

Hat jemand eine Idee, was hier schief geht?

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [7. Juli 2016 um 11:11 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/3 "2016-07-07T11:11:54Z")

</div>

Hallo,

für welche Shopware Version entwickelst du denn das Plugin? Für bis Version 5.1.6 oder ab Version 5.2.0?

Beste Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![baal](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@baal](https://forum.shopware.com/u/baal)\
**Post date:** [7. Juli 2016 um 11:24 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/4 "2016-07-07T11:24:09Z")

</div>

Sorry, das habe ich vergessen zu schreiben. Die Version ist 5.1.6.

---

<div class="post-metadata">

**Author:** ![baal](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@baal](https://forum.shopware.com/u/baal)\
**Post date:** [7. Juli 2016 um 13:04 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/5 "2016-07-07T13:04:52Z")

</div>

Die Darstellung des Extraattributes habe ich jetzt hinbekommen.

**Auszug aus download.js:**

```
/**
 * Creates the grid for the already assigned article downloads
 * @return Ext.grid.Panel
 */
createDownloadGrid: function() {
    var me = this;

    me.downloadGridElements = me.callParent(arguments);

    var column = Ext.create('Ext.grid.column.Column', {
        text: 'ShopLimitierung',
        dataIndex: 'attribute[ggShopIds]',
        renderer: function(value, metaData, record) {
            if (record && record.getAttributes() instanceof Ext.data.Store && record.getAttributes().getCount() > 0) {
                return record.getAttributesStore.data.items[0].data.ggShopIds;
            } else {
                return '';
            }
        }
    });

    me.downloadGridElements.headerCt.insert(
        me.downloadGridElements.columns.length - 1, // that's index column
        column
    );

    return me.downloadGridElements;
}

```

Das Speichern funktioniert leider noch nicht.

---

<div class="post-metadata">

**Author:** ![baal](https://avatars.discourse-cdn.com/v4/letter/b/13edae/32.png) [@baal](https://forum.shopware.com/u/baal)\
**Post date:** [8. Juli 2016 um 09:17 UTC](https://forum.shopware.com/t/extjs-erweiterung-des-resourcen-tab/37965/6 "2016-07-08T09:17:16Z")

</div>

Ich hab nun eine Lösung für die Speicherung der Attribute gefunden. Dazu war es nötig ‘Shopware.apps.Article.controller.Detail’ zu überschreiben.

```
//{block name="backend/article/controller/detail" append}
Ext.define('Shopware.apps.ShopAwareResources.controller.Detail', {

    override: 'Shopware.apps.Article.controller.Detail',

    /**
     * Event listener function of the resources component.
     * Fired when the user clicks the add download button.
     *
     * @event
     * @param [Ext.grid.Panel] The download grid
     * @param [Ext.form.Panel] The download panel for the link
     */
    onAddDownload: function(grid, form) {
        var me = this, model,
            store = grid.getStore(),
            values = form.getValues();

        if (!form.getForm().isValid()) {
            return;
        }
        if (form.getForm().getRecord()) {
            model = form.getForm().getRecord();
            form.getForm().updateRecord(model);
        } else {
            model = Ext.create('Shopware.apps.Article.model.Download', values);
            var attrRecord = Ext.create('Shopware.apps.Article.model.DownloadAttribute');
            attrRecord.set('ggShopIds', values['attribute[ggShopIds]']);
            model.getAttributes().add(attrRecord);
        }

        store.add(model);
        form.getForm().reset();
    }

});
//{/block}

```

&nbsp;
