# Erweiterung NewsletterManager - s\_campaign\_maildata

**URL:** <https://forum.shopware.com/t/erweiterung-newslettermanager-s-campaign-maildata/14280>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [9. Juli 2013 um 12:53 UTC](https://forum.shopware.com/t/erweiterung-newslettermanager-s-campaign-maildata/14280 "2013-07-09T12:53:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![markus.h](https://avatars.discourse-cdn.com/v4/letter/m/a587f6/32.png) [@markus.h](https://forum.shopware.com/u/markus.h)\
**Post date:** [9. Juli 2013 um 12:53 UTC](https://forum.shopware.com/t/erweiterung-newslettermanager-s-campaign-maildata/14280/1 "2013-07-09T12:53:50Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![markus.h](https://avatars.discourse-cdn.com/v4/letter/m/a587f6/32.png) [@markus.h](https://forum.shopware.com/u/markus.h)\
**Post date:** [11. Juli 2013 um 14:56 UTC](https://forum.shopware.com/t/erweiterung-newslettermanager-s-campaign-maildata/14280/2 "2013-07-11T14:56:37Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![markus.h](https://avatars.discourse-cdn.com/v4/letter/m/a587f6/32.png) [@markus.h](https://forum.shopware.com/u/markus.h)\
**Post date:** [11. Juli 2013 um 15:38 UTC](https://forum.shopware.com/t/erweiterung-newslettermanager-s-campaign-maildata/14280/3 "2013-07-11T15:38:38Z")

</div>

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')`
