Hallo Angenommen ich habe eine Kreuztabelle „supplier_standort“, wo supplierID und standortID drin gespeichert werden. Die Tabelle standort gibt es dann natürlich auch. Und Hersteller A steht in der Kreuztabelle 3x drin (da ihm 3 Standorte zugewiesen wurden) und Hersteller B steht 5x drin. Ist es möglich, dass, wenn ich im Backend auf Artikel/Hersteller klicke und danach auf „Neu“ oder „Bearbeiten“, dass dann unterhalb der normalen Formularfelder ein neues FieldSet erscheint mit allen Standorten untereinander und jeweils Checkboxen daneben? Und bei Hersteller A sind dann eben 3 Haken drin und Hersteller B 5 Haken. Ich habe es geschafft die backend/supplier/view/main/create.js zu erweitern, so dass es statische Formularfelder anzeigt. Statt der Checkboxen sind noch Textfelder drin. getFormPanel: function() { //alert('getFormPanel'); var me = this; var result = me.callParent(arguments); var itemNeu= Ext.create('Ext.form.FieldSet', { alias: 'widget.supplier-customergroups-rebates', title: 'Kundengruppen / Rabatte', collapsible: true, collapsed: true, defaults : { labelWidth : 130, anchor : '100%' }, items: [{ xtype : 'textfield', name : 'TestName', fieldLabel : 'Standort 1', supportText : 'bitte 1 falls wahr', allowBlank : true }] }); result.insert(5, [itemNeu]); return result; }
Aber mir geht es darum, dass dort eben Daten einer anderen DB-Tabelle ausgelesen werden, und dann auch immer alle, die in der DB-Tabelle drin stehen. Geht so etwas? Müssen die Einbindung auch in dem items-Block passieren? Ich habe mich am Plugin „Einsteiger - Schuhgrößen Erweiterung“ orientiert. So wie dort habe ich auch keinen Controller angelegt. Müsste ich für mein Vorhaben einen anlegen? Wie wäre denn hier das Zusammenspiel zwischen View, Controller und Modell? Grüße, Mike
Hi Mike, damit du die Daten holen kannst musst du einen eigenen PHP Controller registrieren, bei dem du dann über ein Model bzw einen Store anklopfst um die gewünschten Daten zu erhalten. Ich kann dir da leider keinen konkreten Lösungsweg nennen da dies definitiv zu umfangreich ist aber im Prinzip solltest du dir die Wiki-Beiträge zum Thema Backendprogrammierung nochmal reinziehen - da steht eigentlich alles notwendige drin. Gehen tuts auf jeden Fall!
Vielen Dank Martin für die schnelle Rückmeldung. Werde wohl nochmal intensiv lesen müssen Noch eine Frage: Angenommen, mein PHP-Controller sammelt die Daten, die ich haben will. Wie bekomme ich dann das Ergebnis in den Items-Block? Gibt es dafür einen Befehl? Ich durchforste die Tutorials schon ne ganze Weile, aber finde die Stelle nicht, wo man einige Daten von hier, und dann die restlichen Daten von wo anders holt. Die Hersteller sollen ja so bleiben wie sie sind, nur halt mit zusätzlichen Daten einer anderen Tabelle. Grüße, Mike
Hi Mike, ich kopier dir hier jetzt mal beispielhaft den Code aus einem unserer Plugin Backend-Models rein. Dort siehst du wie der PHP Controller angesprochen wird: //{block name="backend/diw\_article\_priority/model/diw\_grid\_data"} Ext.define('Shopware.apps.DiwArticlePriority.model.DiwGridData', { extend:'Ext.data.Model', fields:[{ name : 'id', type: 'integer' }, { name : 'priority', type:'integer'}, { name : 'description', type: 'string' }], proxy : { type : 'ajax', api : { read : '{url controller=DiwArticlePriority action=getPriorities}', create: '{url controller=DiwArticlePriority action=createPriority}', update:'{url controller=DiwArticlePriority action=updatePriority}', destroy:'{url controller=DiwArticlePriority action=deletePriority}' }, reader : { type : 'json', root: 'data' }, writer:{ root:'data' } } }); //{/block}
Cool, vielen Dank für die Antworten :thumbup:. Dann werde ich mal tüfteln…
Bin am Verzweifeln Die Tutorials sind gut nachvollziehbar. Aber es bringt mich nicht voran. Der Store ist da, das Model auch, der PHP-Controller holt die Daten aus der DB und hält die Daten bereit. Aber wie sage ich der items:-Anweisung, dass dort jetzt genau diese aus dem Store geladenen Daten hinkommen? Wie verknüpfe ich überhaupt diese itemNeu-Variable mit nem Store? Hab’s wahrscheinlich noch nicht intus. Kann mir jemand weiterhelfen? Gruß, Mike