# Plugin Store / Model laden

**URL:** <https://forum.shopware.com/t/plugin-store-model-laden/18248>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [6. Februar 2014 um 19:32 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248 "2014-02-06T19:32:47Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [6. Februar 2014 um 19:32 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/1 "2014-02-06T19:32:47Z")

</div>

Hallo, Ich überschreibe mit einem Backend Plugin erfolgreich Componenten von Import-Export Fenster im Backend. Und zwar den Controller und die View. Nur brauch ich zusätzlich ein Store + Model. Import-Export verfügt über kein Store und Model. Meine eigenen sind soweit angelegt müssen aber noch geladen werden. Das heißt ich muss die Import-Export/App.js überschreiben mit Store und Model. Ebenso muss ich den Pfad bekannt machen. Wie geht so was? Wäre über ein Tipp dankbar.

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [6. Februar 2014 um 19:37 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/2 "2014-02-06T19:37:27Z")

</div>

Hi, du kannst den Block der app.js erweitern und deine eigenen Sachen mit einem Smarty include einbinden. lG Daniel Gesendet von meinem HTC One mit Tapatalk

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [6. Februar 2014 um 19:56 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/3 "2014-02-06T19:56:10Z")

</div>

Hast du dafür ein Beispiel? Wie gesagt view und Controller werden bereits erfolgreich überschrieben. Nun müssen eigene store und Model integriert und bekannt gemacht werden. Gesendet von meinem iPhone mit Tapatalk

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [6. Februar 2014 um 20:44 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/4 "2014-02-06T20:44:30Z")

</div>

Hi, hier einmal due zip runterladen und einen Blick in die app.js werfen. [http://wiki.shopware.de/\_detail\_1071\_871.html](http://wiki.shopware.de/%5C_detail%5C_1071%5C_871.html) Besten Gruß, Daniel Gesendet von meinem HTC One mit Tapatalk

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. Februar 2014 um 08:47 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/5 "2014-02-07T08:47:26Z")

</div>

Hi Daniel, das hat mir schon weitergeholfen. Nun bekomme ich keinen Fehler und es wird auch scheinbar geladen. Führe ich aber im Contoller dies aus: ` /\*\* \* Creates the necessary event listener for this \* specific controller and opens a new Ext.window.Window \* @return void \*/ init: function() { var me = this; me.comboTreeCategoryStore = me.getStore('CategoryForComboTree'); me.mainWindow = me.getView('main.Mainwindow').create({ comboTreeCategoryStore: me.comboTreeCategoryStore }).show(); me.comboTreeCategoryStore.load(); console.log(me.comboTreeCategoryStore.getRootNode()); me.callParent(arguments); }` So habe ich in der Debug Ausgabe im RootNode keine Child Elemente. Hier sollte eig. der Kategoriebaum erscheinen. Das ganz hartgecodet direkt im Core funktioniert. Daher kann es nur noch am Einbinden oder am Store / Model liegen. Ich denke an der Verbdinung Store zu Model. Wenn ich nämlich im Store kein Model angebe und dort direkt das Root Element anlege, so bekomme ich die Info in der Debug Ausgabe. Daher sollte die Frage sein, warum wird das Model nicht geladen? Hast du hier noch eine Idee? Die App.js habe ich nun eingebunden mit diesem Inhalt: ` //{block name="backend/import\_export/application" append} //{include file="backend/import\_export/store/category\_for\_combo\_tree.js"} //{include file="backend/import\_export/model/category\_for\_combo\_tree.js"} //{/block} ` Hier noch der Inhalt backend/import\_export/store/category\_for\_combo\_tree.js ` //{block name="backend/import\_export/store/category\_for\_combo\_tree"} Ext.define('Shopware.apps.ImportExport.store.CategoryForComboTree', { /\*\* \* Extend for the standard ExtJS 4 \* @string \*/ extend : 'Ext.data.TreeStore', remoteFilter: true, /\*\* \* Auto load the store after the component \* is initialized \* @boolean \*/ autoLoad : true, /\*\* \* Define the used model for this store \* @string \*/ model : 'Shopware.apps.ImportExport.model.CategoryForComboTree' /\* data: { text: 'Budget', area: 1, children: [{ name: 'Defense', area: 0.5, children: [] }, { name: 'Education', area: 0.3, children: [] }, { name: 'Debt', area: 0.2, children: [] }] }, \*/ }); //{/block} ` Hier noch der Inhalt: backend/import\_export/model/category\_for\_combo\_tree.js ` //{block name="backend/import\_export/model/category\_for\_combo\_tree"} Ext.define('Shopware.apps.ImportExport.model.CategoryForComboTree', { /\*\* \* Extends the default extjs 4 model \* @string \*/ extend : 'Ext.data.Model', /\*\* \* Defined items used by that model \* \* We use a reduces feature set here - just necessary fields are selected \* \* @array \*/ fields : [//{block name="backend/import\_export/model/category\_for\_combo\_tree/fields"}{/block} { name : 'name', type: 'string' }, { name : 'id', type: 'int' }, { name : 'parentId', type: 'int' }, { name : 'cls', type: 'string' }], proxy : { type : 'ajax', api : { read : '{url controller=category action=getList}' }, reader : { type : 'json', root: 'data' } } }); //{/block}` Danke Dir.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [7. Februar 2014 um 16:09 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/6 "2014-02-07T16:09:58Z")

</div>

okay, nun hab ich es fast. Ein Problem besteht noch, da kannst du mir sicher weiterhelfen. Die Übergabe des Objekt (Store) an das Window. In den Core Änderungen gehts, als Plugin nicht. Main.js: ` init: function() { var me = this; me.comboTreeCategoryStore = me.getStore('CategoryForComboTree'); me.mainWindow = me.getView('main.Mainwindow').create({ comboTreeCategoryStore: me.comboTreeCategoryStore }).show(); me.comboTreeCategoryStore.load(); console.log(me.comboTreeCategoryStore.getRootNode()); me.callParent(arguments); } ` Schau ich hier die Consolen Log an, so habe ich meine Objekt in me.comboTreeCategoryStore. Diese geben ich ja oben eig. an die View weiter. In der View ist aber me.comboTreeCategoryStore unbekannt. Hast du ne Idee?

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [8. Februar 2014 um 09:05 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/7 "2014-02-08T09:05:37Z")

</div>

Hi Daniel, solangsam komme ich dem auf die Spur. kann es sein, dass der Main.js Controller zwei mal die Init Funktion aufruft? Ein mal die Original und ein mal die Überschriebene? Wenn ich nämlich in dem Windows das übergeben Obeject Debugge, so bekomme ich zwei Ausgaben. Bei der ersten Ausgabe ist der Object korrekt enthalten und bei der zweiten Ausgabe ist es undefine.

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [8. Februar 2014 um 10:23 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/8 "2014-02-08T10:23:56Z")

</div>

Hi, schwer zu sagen. Wie überschreibst du den Controller denn? Normalerweise funktioniert das ganz gut, wir benutzen ja nichts anderes in unseren Plugins. Die einzige Schwierigkeit, die ich prinzipiell ausmache, ist hier der Tree - der ist in ExtJS manchmal etwas widerspändstig :). lG Daniel

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [8. Februar 2014 um 12:39 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/9 "2014-02-08T12:39:52Z")

</div>

Hi Daniel, also der Controller liegt hier: /Views/backend/import\_export/controller/ott\_import\_export\_extension/main.js er wird in der Boostrap bei der Load Action von Import\_Export geladen: ` if ($args-\>getRequest()-\>getActionName() === 'index') { $view-\>extendsTemplate('backend/import\_export/app.js'); } ` Und der Inhalt sieht so aus: ` //{block name="backend/import\_export/controller/main" append} //{namespace name=backend/ott\_import\_export\_extension/main} Ext.define('Shopware.apps.ImportExport.controller.Main.ott\_import\_export\_extension.Main', { override: 'Shopware.apps.ImportExport.controller.Main', /\*\* \* Creates the necessary event listener for this \* specific controller and opens a new Ext.window.Window \* @return void \*/ init: function() { var me = this; me.comboTreeCategoryStore = me.getStore('CategoryForComboTree'); me.mainWindow = me.getView('main.Mainwindow').create({ comboTreeCategoryStore: me.comboTreeCategoryStore }).show(); me.comboTreeCategoryStore.load(); console.log(me.comboTreeCategoryStore.getRootNode()); me.callParent(arguments); } }); //{/block} `

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [8. Februar 2014 um 13:27 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/10 "2014-02-08T13:27:07Z")

</div>

Hi, ich glaube, da liegt der Fehler: In der Index-Action wird die Application geladen - also die app.js. Dort spielst du nur deine Erweiterung der app.js ein. Die Smarty-Includes in deiner Erweiterung der app.js verweisen nur auf \*neue\* Dateien. Erweiterung bestehender Dateien nimmst du in der loadAction vor. Hier lädt die ExtJS-Application die weiteren Bestandteile (wie den Controller) nach. Entsprechend machst du da dann ein extendsTemplate auf deine Controller-Erweiterung, in der wiederum mittels ‘override’ der bestehende Controller überschrieben wird. lG Daniel

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [8. Februar 2014 um 14:35 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/11 "2014-02-08T14:35:10Z")

</div>

Sory, ich hatte dir fälschlicherweise die App.js als Code eingefügt. Das ist quatsch. Da wird der Controller nicht überschrieben. Hier, in der Load Action: ` //if the controller action name equals "load" we have to load all application components if ($args-\>getRequest()-\>getActionName() === 'load') { $view-\>extendsTemplate( 'backend/import\_export/view/main/ott\_import\_export\_extension/mainwindow.js' ); $view-\>extendsTemplate( 'backend/import\_export/controller/ott\_import\_export\_extension/main.js' ); } `

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [9. Februar 2014 um 09:09 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/12 "2014-02-09T09:09:49Z")

</div>

Hi, meinst du den call Parent-Aufruf? Damit wird ja die Methode der Parent-Klasse aufgerufen, die du überschrieben hast - also so gesehen 2 Mal init. Gesendet von meinem HTC One mit Tapatalk

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [9. Februar 2014 um 10:16 UTC](https://forum.shopware.com/t/plugin-store-model-laden/18248/13 "2014-02-09T10:16:08Z")

</div>

Aber wo liegt jetzt der Fehler? Ich weiß nicht was ich ändern muss, damit das Objekt übergeben wird an die Main.Mainview. Gesendet von meinem iPhone mit Tapatalk
