Nachdem mir Petra in mehreren Schritten aus der Patsche geholfen hat, hier nun die Lösung für alle, die eine Newslettercheckbox in einem Formular einbauen möchten und bei angehakter Box die Email Adresse automatisch in den Newsletterverteiler aufgenommen werden soll.
Schritt 1 - Eigenes Modul
Unter /system/modules/ folgende Struktur anlegen
/newslettercheckbox/ (beliebiger Name)
/newslettercheckbox/Newslettercheckbox.php (beliebiger Name - muss aber auch in der config.php dementsprechend angepasst werden -- bei Kleinschreibung hatten wir Probleme mit Typolight, deshalb das große "N")
/newslettercheckbox/config/ (muss so benannt sein)
/newslettercheckbox/config/config.php
Schritt 2 - Der Code in der Dateien config.php ('Newslettercheckbox' entspricht der Datei im Modulordner)
PHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Newslettercheckbox', 'processFormData');
?>
Schritt 3 - Der Code in der Newslettercheckbox.php (wie bereits erwähnt müssen dieser Name und der Name in der config.php übereinstimmen, ebenso der Klassenname - siehe code)
PHP-Code:
<?php
//$arrPost: die aus dem Fromular übermittelten Daten
//$arrForm: quasi die "Konfiguration" des Formulars (Einstellungen aus Formulargenerator)
//$arrFiles: ggf. per Upload-Feldern hochgeladene Dateien
class Newslettercheckbox extends Frontend
{
public function processFormData($arrPost, $arrForm, $arrFiles)
{
//print_r($arrPost); So kann man die übergebenen Werte ausgeben lassen - zur Prüfung
//Kontaktformular -> Checkbox für Newsletter aktiviert?
//********************************************************************
if($arrForm['id'] == 1) {
$subscribe = false;
if($arrPost['newsletter'] == "Ja") {
$subscribe = true;
$PostData = array('email'=>$arrPost['email'], 'FORM_SUBMIT'=>'tl_subscribe','channels[]'=>'1');
$ch = curl_init("http://{$_SERVER['HTTP_HOST']}/home.html");
}
}
//subscribe?
if($subscribe) {
$Post = http_build_query($PostData);
curl_setopt ($ch, CURLOPT_HEADER, 0 );
curl_setopt ($ch, CURLOPT_REFERER, "http://{$_SERVER['HTTP_HOST']}");
curl_setopt ($ch, CURLOPT_POSTFIELDS, $Post);
curl_setopt ($ch,CURLOPT_POST,TRUE);
curl_setopt ($ch,CURLOPT_HTTPGET,FALSE);
$data = curl_exec( $ch );
curl_close ($ch);
}
}
}
?>
Schritt 4 - Was bedeutet das?? Worauf muss ich achten??
PHP-Code:
if($arrForm['id'] == 1) {
Hier "1" muss der ID des Formulars entsprechen (siehe Backend Formulargenerator)
PHP-Code:
if($arrPost['newsletter'] == "Ja")
die Checkbox "newsletter" hat den Wert "Ja" -- ebenfalls dem eigenen Formular entnehmen oder lt. Schritt 5 herausfinden
PHP-Code:
$arrPost['email']
'email' entspricht der Feldbezeichnung im eigenen Formular. Somit wird das Feld 'email' automatisch in das Newsletter subscribe Formular eingetragen.
PHP-Code:
$ch = curl_init("http://{$_SERVER['HTTP_HOST']}/newsletter.html");
hier muss der Link zum Newsletteranmeldeformular angegeben werden. Ich konnte bei mir /newsletter.html komplett weglassen, da es sich in meinem Fall auf der Startseite befand.
Schritt 5 - Testen und staunen
Sollte eigentlich alles klappen. Man kann sich mit
PHP-Code:
print_r($arrPost);
die übergebenen Werte aus dem Formular anzeigen lassen. Dann sieht man genau, welche Werte übergeben werden! Wie üblich wird eine Aktivierungsmail an den User versandt!
Ich hoffe, das war jetzt nicht zu kompliziert!
tom --- und Danke noch mal an Petra für den Code!!