About Maik Vlcek Follow me on twitter
Themenschwerpunkte dieses Blogs:

Direct Mail Newsletter Anmeldung über Mailformplus oder ein anderes Kontaktformular

Typo3
Share and Enjoy: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • Digg

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.

Publiziert am 25. Mär. 2008 von mediavrog in , , , , , , , , , . Kategorie: T3.

Share and Enjoy: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Y!GG
  • MisterWong
  • Facebook
  • email
  • del.icio.us
  • Digg
  • StumbleUpon
  • Technorati
  • LinkedIn
  • Reddit
  • Twitter
Monster-Me eating knowledge
11 Kommentare RSS Icon
Trackback URL
Einen Kommentar hinterlassen

Du kannst die folgenden Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  1. Uwe

    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

    1. 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

  2. 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

  3. Neo

    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.

  4. 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

  5. Neo

    Wahrscheinlich sind meine php-Kenntnisse einfach nicht ausreichend. Also ganz vereinfacht müsste es doch so laufen:
    Einmal in Typo

    //aufruf im root_template
    plugin.tx_thmailformplus_pi1.saveUserFunc = fileadmin/metsoft/php/class.into_directmail.php:tx_into->rein_da
    

    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.

  6. 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

  7. Neo

    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

top top