Benutzer:Buchbergertom

Aus Contao Community Documentation

Version vom 9. Juli 2010, 10:27 Uhr von Buchbergertom (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

HTML Die Lösung!

   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!!
Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Kann es sein, dass sich SyncCto bei Sync->Client anders verhält als umgegekehrt also Sync->Server ?
<xtra> ja, da laufen die Daten in die andere Richtung *scnr*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge