Hinzufügen eines benutzerdefinierten Feldes zum Abonnementmodul von Magento

8

Das Newsletter Subscription Modul in Magento hat standardmäßig nur ein Feld (Email). Nachdem ich dem Formular ein zusätzliches Feld hinzugefügt habe (z. B. Land), wie kann ich die Formulardaten im Magento-Backend anzeigen lassen und als E-Mail an einen voreingestellten Empfänger senden? Danke.

    
pixeltocode 01.07.2010, 07:25
quelle

4 Antworten

22

Es gibt einige Dinge, auf die Sie achten müssen, damit dies funktioniert:

  1. Fügen Sie der entsprechenden Datenbanktabelle eine neue Spalte für Ihre Daten hinzu
  2. Stellen Sie sicher, dass Magento Ihr neues Feld in der Datenbank speichert
  3. Präsentieren Sie die Daten im Admin-Backend
  4. Zeichnen Sie die Daten auf, wenn Sie ein neues Newsletter-Abonnement erhalten

So können Sie all diese Dinge tun:

Anzeige 1)

Fügen Sie mit der mySQL-Befehlszeile von phpMyAdmin oder Ihrer bevorzugten DB-Bearbeitungsmethode eine neue Spalte "country" als beispielsweise varchar (100) in die Tabelle newsletter_subscriber ein.

Anzeige 2)

Magento gibt Ihnen automatisch Zugriff auf das neue Feld über die Methoden getCountry () und setCountry () für das Objekt Mage_Newsletter_Model_Subscriber. Das einzige, was es nicht tun wird, ist, das Feld in der DB zu speichern, nachdem es irgendwo im System mit Code geändert wurde. Um es zu speichern, müssen Sie die Funktion _prepareSave (Mage_Newsletter_Model_Subscriber $ subscriber) in Mage_Newsletter_Model_Mysql4_Subscriber (app / code / core / Mage / Newsletter / Model / Mysql4 / Subscriber.php) ändern. Stellen Sie sicher, dass Sie zuerst eine lokale Kopie der Datei erstellen und die Kerndatei nicht ändern. Folgendes müssen Sie hinzufügen:

%Vor%

Anzeige 3)

Sie müssen ( eine lokale Kopie von ) die Datei app / code / core / Mage / Adminhtml / Block / Newsletter / Subscriber / Grid.php ändern. Die Methode, nach der Sie suchen, heißt _prepareColumns (). Dort sehen Sie eine Reihe von Aufrufen von $ this- & gt; addColumn (). Sie müssen einen entsprechenden Anruf für Ihr Feld "Land" mit dem folgenden Code hinzufügen:

%Vor%

Wenn das Feld am Ende des Gitters angezeigt werden soll (als letzte Spalte), fügen Sie es als letzten Aufruf hinzu, andernfalls drücken Sie es zwischen den bestehenden Aufrufen genau dorthin, wo es im Admin enden soll.

Anzeige 4)

Dies ist ein Teil, den ich in meiner Anpassung des magento-Newsletters nicht machen musste, also wird es hauptsächlich theoretisch sein. Die Subskription erfolgt im Controller unter app / code / core / Mage / Newsletter / controllers / SubscriberController.php. Hier ist der Code der newAction-Methode mit meinen vorgeschlagenen Änderungen:

%Vor%

Die obigen Schritte sollten den größten Teil Ihres Problems berücksichtigen. Lass mich wissen, wie dieser letzte Teil funktioniert hat, da ich keine Chance hatte, ihn zu testen.

Sobald Sie Ihr zusätzliches Feld im Subscriber-Objekt haben, können Sie damit machen, was Sie wollen. Ich habe nicht wirklich verstanden, was du meinst

  

wird als E-Mail an einen voreingestellten Empfänger gesendet

Wenn Sie erklären können, dass ich versuchen werde, Ihnen auch mit diesem Teil zu helfen.

Bearbeiten - So senden Sie eine E-Mail, wenn jemand abonniert hat

Fügen Sie dem Controller nach dem Teil, der Land zu einem Teilnehmerobjekt hinzufügt, einfach den folgenden Code hinzu.

%Vor%     
silvo 03.07.2010, 22:11
quelle
33

Wenn Sie einige benutzerdefinierte Felder für Magento-Newsletter-Abonnenten hinzufügen möchten (zum Beispiel Teilnehmername ), sollten Sie Folgendes tun:

  • Fügt eine neue Spalte für newsletter_subscriber table
  • hinzu
  • Fügen Sie der Newslettervorlage eine Texteingabe hinzu
  • Erstellen Sie einen Beobachter für newsletter_subscriber_save_before -Ereignis

Im Beobachter können Sie den Wert Ihres benutzerdefinierten Feldes aus der Anfrage abrufen und dem Objekt des Abonnenten zuweisen:

%Vor%


UPDATE :

Hier ist der detaillierte Artikel, der erklärt, wie das Feld Country Außerdem habe ich ein kostenloses Modul erstellt, das auf dem GitHub

verfügbar ist     
Roman Snitko 21.06.2011 13:05
quelle
0

Wenn Sie die akzeptierte Antwort hinzufügen, können Sie dies auch etwas leichter haben, wenn Sie eine date-, datetime- oder timestamp-artige Spalte hinzufügen.

In meinem Fall wollte ich ein "Abonniert am Datum" zu meinem Raster hinzufügen. Dazu habe ich mein Upgrade-Skript geschrieben, wobei der Spaltentyp TIMESTAMP und der Standardwert CURRENT_TIMESTAMP ist. Auf diese Weise wird beim Hinzufügen der Zeile das aktuelle Datum / die aktuelle Uhrzeit aufgezeichnet.

Dann müssen Sie nur Ihre Blockanpassungen hinzufügen. Ich würde vorschlagen, dies zu tun, indem ich den Grid-Block von Magento erweitere, anstatt die lokale Codepool-Überschreibung durchzuführen. Auf diese Weise müssen Sie nur _prepareColumns ();

überschreiben     
Brian F 10.12.2012 22:35
quelle
0

Alter Thread, aber wenn jemand dieselbe Frage hat, gibt es eine freie Erweiterung, die Felder für Geschlecht, Vorname und Nachname hinzufügt und sie im Backend-Gitter für den Export über xml / csv zur Verfügung stellt: Ссылка

Vielleicht können Sie den Code auf Ihre Bedürfnisse erweitern.

    
silenzium 19.01.2014 16:42
quelle