Erweiterung NewsletterManager - s_campaign_maildata

Hallo! Ich möchte gerne den NewsletterManager erweitern und dem Backenduser ermöglichen in der Ansicht Empfänger, Daten wie Adresse, Telefon, Firma, … zu verwalten. Nun habe ich ein Backendplugin angelegt, welches die backend/newsletter_manager/view/tabs/recipients.js so erweitert, das ich dort mehrere Spalten anzeigen kann. Leider hänge ich nun an der Datenabfrage. Wie es aussieht dürfte es keine Verknüpfung des Adress-Models mit der Tabelle s_campaigns_maildata geben, bzw. konnte ich keine finden. Muss ich dazu ein eigenes Model anlegen? Oder gäbe es eine integriertere Lösung? Danke für Eure Infos! LG, Markus

Zur Info: Ich habe nun ein eigenes Model angelegt und damit funktioniert es. Ich habe nun das Newsletterempfänger Grid so umgebaut, dass die Anzeige nach Emailadresse gruppiert wird und nicht für jede Gruppe eine Zeile verwendet wird. Nun möchte ich per EditAction ein Formular öffnen, mit dem einer Email-Adresse per Checkbox verschiedene Newslettergruppen zugeordnet werden kann. Dazu habe ich ein eigenes Window (groups_dialog.js - angelehnt an die bestehende sender_dialog.js) angelegt: //{namespace name="backend/pixelpoems\_newsletter\_manager\_extension/main"} /\*\* \* Shopware UI - sender dialog \* A popup window which will ask the user to edit/create a sender \* todo@dn: there should be a row-editor for this! \*/ //{block name="backend/pixelpoems\_newsletter\_manager\_extension/view/groups\_dialog"} Ext.define('Shopware.apps.NewsletterManager.PixelpoemsNewsletterManagerExtension.view.GroupsDialog', { extend: 'Enlight.app.Window', alias : 'widget.newsletter-manager-pixelpoems-newsletter-manager-extension-view-groups-dialog', layout: 'fit', width: 300, height: 150, stateful: true, stateId: 'shopware-newsletter-manager-pixelpoems-newsletter-manager-extension-view-groups-dialog', // modal: true, // footerButton: false, autoShow: true, border: false, /\*\* \* Init the component, add noticeContainer and Tabs \*/ initComponent: function() { var me = this; me.title = 'Gruppen konfigurieren' me.items = me.createForm(); me.addEvents( /\*\* \* Fired when the user submits the valid form \* @param Ext.form.Panel panel \*/ 'saveRecipientGroups' ); me.callParent(arguments); }, /\*\* \* Creates and returns a form field with a 'mail' and 'name' textfield \*/ createForm: function() { var me = this; me.form = Ext.create('Ext.form.Panel', { layout: { type: 'vbox', // Arrange child items vertically align: 'stretch', // Each takes up full width padding: 5 }, // The fields defaultType: 'textfield', items: [{ fieldLabel: 'Mail address', name: 'email', allowBlank: false, checkChangeBuffer: 700, vtype: 'email' },{ fieldLabel: 'Vorname', name: 'firstname', allowBlank: false }], // Reset and Submit buttons buttons: [{ text: '{s name=cancel}Cancel{/s}', handler: function() { this.up('form').getForm().reset(); me.destroy(); } }, { text: '{s name=submit}Submit{/s}', formBind: true, //only enabled once the form is valid disabled: true, handler: function() { var form = this.up('form').getForm(); if (form.isValid()) { me.fireEvent('saveRecipientGroups', form); me.destroy(); } } }] }); if(me.record) { me.form.getForm().loadRecord(me.record); } return me.form; } }); //{/block} weiters habe ich die controller/admin.js angepasst: //{namespace name="backend/pixelpoems\_newsletter\_manager\_extension/newsletter\_manager/main"} // /\*\* \* Shopware Controller - Admin controller \* For events and actions fired in the admin tab \*/ //{block name="backend/newsletter\_manager/controller/admin append"} Ext.define('Shopware.apps.NewsletterManager.PixelpoemsNewsletterManagerExtension.controller.Admin', { override: 'Shopware.apps.NewsletterManager.controller.Admin', /\*\* \* Initializes the class override to provide additional functionality \* like a new full page preview. \* \* @public \* @return void \*/ init: function() { var me = this; me.control({ 'newsletter-manager-groups\_dialog': { 'saveRecipientGroups': me.onSaveRecipientGroups }, 'newsletter-manager-tabs-recipients': { 'editGroups': me.onEditGroups } }); me.callOverridden(arguments); }, /\*\* \* Called when the user clicks the 'edit' button in the action column. \* Will open up a new window allowing the user to edit this record \* @param record \*/ onEditGroups: function(record) { var me = this, groupsDialog; me.groupsDialog = Ext.create('Shopware.apps.NewsletterManager.PixelpoemsNewsletterManagerExtension.view.GroupsDialog', { record:record }); /\*groupsDialog = me.getView('GroupsDialog').create({ record: record });\*/ }, /\*\* \* Called after the user edited a row in the recipient view and clicked the 'update' button \* @param editor \* @param event \*/ onSaveRecipientGroups: function(editor, event) { console.log('hit'); } }); //{/block} Das Popup öffnet sich wunderbar und zeigt auch die Daten an die ich möchte. Zuerst wollte ich es eigentlich per groupsDialog = me.getView('GroupsDialog').create({ record:record }); öffnen, was aber in einem TypeError: 'null' is not an object (evaluating 'cls.prototype') resultiert. Ich vermute, dass ich das View noch irgendwo registrieren muss? Weiter funktioniert der Aufruf des Events nicht, wenn ich auf Submit klicke. Was habe ich falsch gemacht bei der Event-Registrierung? Ich vermute, dass ich durch Ext.create( statt me.getView aus dem Scope rausgekommen bin? Ein komisches Phänomen ist auch der Fehler TypeError: 'undefined' is not an object (evaluating 'subApp.windowManager') wenn man im Window herumklickt. Würde mich sehr über Unterstützung freuen! Gruß, Markus

Die Sache mit dem Event konnte ich bereits lösen: ich wusste bisher nicht, dass man bei me.control( den alias als Referenz angeben musste. Sieht nun so aus: me.control({ 'newsletter-manager-pixelpoems-newsletter-manager-extension-view-groups-dialog': { 'saveRecipientGroups': me.onSaveRecipientGroups }, 'newsletter-manager-tabs-recipients': { 'editGroups': me.onEditGroups } }); Das Event wird nun gefeuert. Trotzdem bleibt mir noch immer die Sache mit dem TypeError: 'undefined' is not an object (evaluating 'subApp.windowManager')