Direct Mail Newsletter Anmeldung über Mailformplus oder ein anderes Kontaktformular
Die Anmeldung zum Erhalt eines Newsletters per DirectMail läuft bekannterweise über die Extension Direct Mail Subscription.
Doch leider fehlt es ihr an Flexibilität, da die Funktionalität des Anmeldens (inkl. Versand einer Bestätigungsmail) nicht in einer Methode gekapselt ist, sondern über Typoscript realisiert wird (userFunc). Somit ist es nicht ohne Weiteres möglich, eine Newsletteranmeldung per Checkbox in einem beliebigen (Kontakt-)Formular zu integrieren. Im Folgenden wird eine Lösung gezeigt, welche die beschriebene Funktionalität ermöglicht.
Das TS-Setup findet sich in der ext_typoscript_setup.txt von Direct Mail Subscription (ein Auszug):
plugin.feadmin.dmailsubscription >
plugin.feadmin.dmailsubscription = USER_INT
plugin.feadmin.dmailsubscription {
userFunc = user_feAdmin->init
includeLibs = media/scripts/fe_adminLib.inc
templateFile = {$plugin.feadmin.dmailsubscription.file.templateFile}
[...]Nach dem Einschreiben über das Frontendplugin von Direct Mail Subscription werden die Daten an die init-Methode der Klasse user_feAdminübergeben, welche sich um das Speichern der Daten in der richtigen Tabelle und den Versand einer Bestätigungsmail (Double Opt-In) kümmert.
Um diese Funktionalität in der eigenen Extension oder einer userFunktion (z.B. bei Mailformplus die saveUserFunc) nutzen zu können muss man wie im TS die richtigen Bibliotheken einbinden und noch ein paar Parameter setzen. Es folgt eine Schritt für Schritt-Anleitung. Es wird vorausgesetzt, dass bereits eine PHP-Datei exisitiert, welche nach dem Abschicken des Mailformulars ausgeführt wird (ähnlich der saveUserFunc von Mailformplus ) und die Extension Direct Mail Subscription passend konfiguriert ist.
die benötigten Klassen und Bibliotheken einbinden
// fe_admin Bibliothek; speichert Daten in DB und verschickt die Bestätigungsmail
require_once("typo3/sysext/cms/tslib/media/scripts/fe_adminLib.inc");
// Extension Direct Mail Subscription; enthält Konfiguration; wird eventuell nicht gebraucht(?)
require_once(t3lib_extMgm::extPath('direct_mail_subscription').'pi/class.dmailsubscribe.php');Die Konfiguration von Direct Mail Subscription holen
$conf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['feadmin.']['dmailsubscription.'];
In dieser Konfiguration ist unter Anderem der Pfad zum Template der Anmeldung kodiert, welche von feAdmin benötigt wird. Falls das Template nicht gefunden wird, so kann man den Pfad auch korrigieren:
$conf['templateFile'] = "../../../".$conf['templateFile'];
Die richtigen Post-Variablen nutzen
Die init Methode der fe_admin wird sich $_POST['FE'] Daten holen, um mit diesen zu arbeiten. Dabei ist in zweiter Ebene des Arrays die Tabelle codiert, in der die Daten gespeichert werden. Der Schlüssel dritter Ebene repräsentiert nunmehr das DB Feld. Folgende Post-Variablen sollten beim Abschicken des Formulars mitgeschickt werden, ansonsten können sie auch in PHP mit eigenen Werten belegt werden.
// Name des Newsletterempfängers $_POST['FE']['tt_address']['name']; // Emailadresse $_POST['FE']['tt_address']['email']; // Sollen HTML Mails empfangen werden? $_POST['FE']['tt_address']['module_sys_dmail_html'];
Objekt von user_feAdmin erzeugen und Konfiguration übergeben
$ua = new user_feAdmin();
$ua->cObj = t3lib_div::makeInstance('tslib_cObj');
$ua->init($content,$conf);Die Variable $content kann laut Class Reference von feAdmin weggelassen werden (leerer String).
Mit dem Ausführen der init-Methode werden alle nötigen Prozesse angestoßen, welche zur Newsletteranmeldung benötigt werden.
Beispiel
Hier nochmal ein Codeblock mit allen benötigten Schritten: Beispiel
Kommentare?
Falls jemand eine einfachere Implementation kennt oder sonstige Hinweise zu meinem Vorschlag hat, der poste doch bitte einen Kommentar :)
Hinweise
Noch zwei letzte Hinweise, falls keine Bestätigungsmail verschickt wird:
Es kann u.A. daran liegen, dass das Template für Direct Mail Subscription nicht gefunden wird. Der Rückgabewert der init-Methode gibt meistens einen guten Aufschluss über den Status und eventuelle Fehler. Einfach mal in ner Variable ablegen und ausgeben (per echo, var_dump etc).
Per getcwd() kann man außerdem per PHP prüfen, in welchen Verzeichnis das aktuelle Script ausgeführt wird. Hilft beim Testen ob der Pfad zum Template File stimmt.








Hallo,
das ist fast was ich brauche doch leider will ich es mit sr_feuser_register machen. Da ich bei Typo3 ein Neuling bin schaffe ich es nicht deine Anleitung so abzuwandeln, dass das sr_feuser_register dass macht was ich will. Also dmail_register anstoßen und die mails verschicken.
Das ganze entwickelt sich leider zu einem aus dem Ruder gelaufenen Kundenprojekt (“nur” schnell einen Newsletter hinzufügen ;-) Und der bisherige Zeitaufwand sprengt alles geplante). Vielleicht kannst Du mir einen Tipp geben, falls Du dich mit sr_feuser_register auch auskennst?
Denn ich weiß nicht wo ich den Code einhängen kann.
Grüße
Uwe
Hallo Uwe,
ich kenne mich zwar mit der Extension nicht aus, habe aber in der Dokumentation einen nützlichen Anhaltspunkt gefunden. Es existiert ein Hook, welcher nach dem Registrieren des Nutzers genutzt werden kann. Dort müsste der obige Code Verwendung finden, um zusätzliche zur FE Registrierung die Anmeldung für den Newsletter durchzuführen. Schau mal nach Using available hooks > registrationProcess_afterSaveCreate unter http://typo3.org/documentation/document-library/extension-manuals/sr_feuser_register/2.5.20/view/1/5/#id4172838
Hast du meine Tipps 1) und 2) berücksichtigt.
Wenn var_dump nichts ausgibt, dann wird wohl die methode nicht ausgeführt :)
Und Direct Mail hat mit Direct Mail Subscription nichts weiter zu tun – habe nachgeschaut und Direct Mail Subscription ist immer noch in der 1.1.0 im Repos
Tja sehr mysteriös, es kommt mit var_dump gar nix, egal welche Variable ich einfüge. ich hab typo 4.2.1 und dm 2.6.0.
Wahrscheinlich gehts damit gar nicht mehr. Mir würde genügen auch nur einen Eintrag in die tt_address zu tätigen, in einer Bedingung gekapselt. Halt ohne subscripe, hauptsache ich muss die Daten nicht selbst eintragen.
Hey,
also ich habe einige Punkte feststellen können, welche Probleme bereiten könnten:
1) plugin.tx_thmailformplus_pi1.saveUserFunc = fileadmin/metsoft/php/class.into_directmail.php:tx_into->rein_da
verweist auf die Klasse “tx_into” aber deine Klasse ist “into_directmail” benannt
2) in der Benennung kann auch ein Problem liegen: wenn Typo3 nicht explizit konfiguriert ist, müssen eigene Klassennamen mit dem Präfix user_ benannt werden (Beispiel: user_into_directmail)
3) $_POST['FE']['tt_address']['name'] = $name; > wird nicht funktionieren, da $name nicht definiert ist (aber ist jetzt wahrscheinlich nur zum Beispiel noch da)
Also ich denke dass die Methode wegen 1) und 2) noch nicht einmal aufgeführt wird. Schonmal var_dumps versucht um zu testen?
Grüße
Wahrscheinlich sind meine php-Kenntnisse einfach nicht ausreichend. Also ganz vereinfacht müsste es doch so laufen:
Einmal in Typo
dann schlicht in der *.php
class into_directmail{ function rein_da(&$params, &$ref) { // Benötigte Klassen einbinden require_once("typo3/sysext/cms/tslib/media/scripts/fe_adminLib.inc"); require_once(t3lib_extMgm::extPath('direct_mail_subscription').'pi/class.dmailsubscribe.php'); // Konfiguration laden $conf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['feadmin.']['dmailsubscription.']; // Template relativ zur aufrufenden Extension setzen wenn nötig //$conf['templateFile'] = "../../../".$conf['templateFile']; // Post vars für die Anmeldung setzen // etwas unschön, aber in meinem speziellen Fall angebracht // (Alternative -> Formularfelder direkt Attribut name mit [FE][tt_address][name] usw. zuweisen $_POST['FE']['tt_address']['name'] = $name; $_POST['FE']['tt_address']['email'] = $params['data']['kemail']; $_POST['FE']['tt_address']['module_sys_dmail_html'] = 1; // Initialisierung feAdmin Objekt $ua = new user_feAdmin(); $ua->cObj = t3lib_div::makeInstance('tslib_cObj'); $ua->init($content,$conf); } }$_POST kann ich ja nach belieben erweitern.
Hi,
in meinem Post findest du einen Link zu einem PHP-Codeblock mit Beispielimplementation. Diesen verwende ich auch in einer Lösung welche online läuft und funktioniert. Jegliche Funktionalität wird eigentlich ohne Anpassung am Typoscript realisiert..
Es kann höchstens sein, dass sich die Extensions geändert haben. Bei mir funktionierts mit direct_mail_subscription 1.1.0 und Typo3 4.0.5
Das beschriebene würde genau mein Problem lösen, leider tut sich nach dem einbinden der userfunc (bei mir über Mailformplus in der saveUserFunc) gar nix. Außer als ich einmal die Pfadangabe zur *.php falsch gesetzt hatte. Es wird weder ein Eintrag getätitgt noch kommt ne Bestätigungsmail seitens directmail.
Hat jemand ein konkretes Beispiel wo es funktioniert, samt seiner *.php und TS-Vorgabe.
Wie ich festellen musste gibt es genau ein Suchergebnis, die genau mein Problem beschreibt und das ist diese Seite hier.
Grüße Neo