Contao-Camp 2024
Ergebnis 1 bis 5 von 5

Thema: Einbinden von SuperWebMailer - Anleitung

  1. #1
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    HTML Einbinden von SuperWebMailer - Anleitung

    Hallo zusammen,

    ich beschäftige mich gerade mit dem SuperWebMailer und habe gelesen, dass einige von Euch den auch schon einmal verwendet haben.

    Es gibt ja mehrere Ansätze, wie der Mailer eingebunden werden kann, z.B.
    • Verwendung der Anmeldung des Contao-Newsletters (Formularfeld) und Import der freigeschalteten Adressen in den Mailer
    • Verwendung der Mailer-Anmeldung als Formularfeld auf der Website

    Hat jemand Erfahrungen oder einen Tipp, wie man da am besten rangeht?

    LG Fryd
    Geändert von Fryd (16.08.2020 um 17:46 Uhr) Grund: Titel geändert

  2. #2
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    HTML SuperWebMailer und Contao - eine Lösung

    Hallo zusammen,

    nachdem ich mir in den letzten Tagen viele Gedanken darüber gemacht habe, wie man den SuperWebMailer (SWM) für Newsletter am besten in Contao einbinden kann, habe ich eine Lösung gefunden. Ich beschreibe sie hier mal, weil es ja vielleicht jemandem hilft oder jemand noch eine Verbesserung weiß.

    Damit es übersichtlich bleibt, teile ich das in mehrere Postings auf.

    Eine der ersten Ideen war, die Mailadressen über ein Contao-Formular in eine Contao-Datentabelle zu schreiben und sie von dort mit dem automatischen Import von SWM in die SWM-Datenbank zu holen. Diesen Ansatz habe ich verworfen, weil es zu viele Unwägbarkeiten gab: automatisches Entfernen aus der Contao-Datei oder markieren? Wie funktioniert eine Abmeldung vom Newsletter? Wahrscheinlich findet man für all dies Lösungen, aber ich habe die Finger davon gelassen.

    Mein Ziel war es, das Anmelde-Formular und die Fehler- und Infoseiten von SWM in den Contaoseiten zu haben, damit es innerhalb der Website bleibt.

    Wie empfohlen, habe für SWM einen eigenen Ordner unterhalb des Wurzelverzeichnisses angelegt (parallel zum Contao-Stammordner) und darauf eine Subdomain gelegt. Die Subdomain wurde per SSL-Zertifikat abgesichert. SWM kann dann mit https://newsletter.do...main.de aufgerufen werden.

    In Contao braucht es drei Seiten für den Newsletter: eine Seite für das Formular, eine für Fehlermeldungen und eine für allgemeine Infomeldungen (die keine Fehler sind). Die Meldungsseiten Seiten werden im SWM unter HTML-Seiten/Umleitungen eingetragen, je nachdem, ob es sich um einen Fehler oder eine Info handelt. Die Option "echte Umleitung" wird aktiviert.

    Bei "An-Abmeldeformulare" kann man im Reiter "Ausgabe" sehen, welche Seite für welche Aktion ausgewählt ist. Auf die allgemeine Einrichtung von SWM gehe ich hier nicht weiter ein.

    Fortsetzung folgt ...

  3. #3
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    Standard

    Das Formular in Contao einbinden

    Der einfachste Weg ist, sich das Formular in SWM erzeugen zu lassen und den Code in Contao in ein HTML-Inhaltselement zu kopieren. Das funktioniert, hat aber folgende Nachteile:

    • Es ist anscheinend etwas trickreich, den SWM-Spamtest einzubinden. Außerdem finde ich persönlich diese Lösung mit den krakeligen Buchstaben als nicht so angenehm.
    • Die Google-Spam-Tests fielen auch aus, weil ich auf Google-Dienste nur zurückgreife, wenn es gar nicht anders geht.
    • Die Fehlerprüfung auf ausgefüllte Pflichtfelder und korrekten Mailadressen finden in SWM statt. Bei Fehlern gelangt man dann zur Fehlerseite, von der aus man dann per Browser-Zurück-Knopf wieder zum Formular kommt.


    Ich habe also in Contao ein normales Formular erzeugt mit den Felder u_EMail, der Spamprüfung und dem Abschicken-Knopf. Für die Erzeugung des Form-Codes ist das Template from_wrapper.html5 zuständig. Es lässt sich kein anderes Template auswählen, so dass man dieses Template ändern muss. Das geänderte Template hat dann folgende Struktur:

    Code:
    <!-- indexer::stop -->
    <?php if( $this->formID == 'swm_formular' ): ?> 
       ... hier steht das angepasste Template für SWM
    <?php else: ?>  
       ... hier steht das allgemeine unveränderte Template
    <?php endif; ?>
    <!-- indexer::continue -->
    Die Unterscheidung, welches Template verwendet wird, richtet sich mach der formID. Das Contao-Formular, das für SWM zuständig ist, bekommt die formID swm_formular. Das kann man in den Formulareigenschaften eingtragen.

    Der modifizierte Teil des Templates sieht dann so aus:

    Code:
    <div class="<?= $this->class ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?>>
    
      <?php if ($this->headline): ?>
        <<?= $this->hl ?>><?= $this->headline ?></<?= $this->hl ?>>
      <?php endif; ?>
    
        <form method="post" action="https://newsletter.dom...ain.de/nl.php">
        <div class="formbody">
          
            <input type="hidden" name="MailingListId" value="1" />
            <input type="hidden" name="FormId" value="1" />
            <input type="hidden" name="FormEncoding" value="utf-8" />
            <input type="hidden" name="u_PersonalizedTracking" value="0" />
            <input type="hidden" name="Action" value="subscribe" />
            
            <input type="hidden" name="FORM_SUBMIT" value="<?= $this->formSubmit ?>">
            <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
            
            <?php if ($this->maxFileSize): ?>
              <input type="hidden" name="MAX_FILE_SIZE" value="<?= $this->maxFileSize ?>">
            <?php endif; ?>
    
          <?= $this->hidden ?>
          <?= $this->fields ?>
        </div>
      </form>
    
    </div>
    Es wurde die form-Zeile ausgetauscht, eine Fallunterscheidung bzgl der Methode entfernt (ist ja jetzt immer "post") und der erste Block mit den 5 hidden-Feldern eingefügt. Auf die Abmelde-Option habe ich verzichtet, weil es ja in jedem Newsletter einen Abmeldelink gibt. Das Feld u_PersonalizedTracking sorgt dafür, dass die Option für personalisiertes Tracking bei jedem Eintrag auf "nein" gesetzt wird.

    Ich weiß nicht, warum - aber die Contao-Überprüfung der Mail-Adresse und auf Pflichtfeld funktionieren. Man kommt in diesen Fällen also nicht mehr auf die SWM-Fehlerseiten, sondern bekommt einen Hinweis direkt im Formular.

    Ob das mit dem Spam-Test funktioniert, habe ich nicht ausprobieren können. Es ist ein Honeypot angelegt und erst wenn dieser gefüllt wird, bekommt man eine kleine Rechenaufgabe. Da das aber wie die anderen Test vermutlich über JavaScript läuft, bin ich guter Hoffnung.

    Fortsetzung folgt ...
    Geändert von Fryd (16.08.2020 um 17:30 Uhr) Grund: u_PersonalizedTracking ergänzt

  4. #4
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    Standard

    Anlegen der Meldeseiten in Contao (Teil 1)

    Beim Aufruf der Meldungsseite (SWM ruft die Seite in Contao auf, die in SWM als Weiterleitungsseite festgelegt wurde) übergibt SWM mit der URL bei Informationen den Parameter "PAGEMESSAGE=" bei Felhermeldungen zusätzlich "ERRORPAGEMESSAGE=". Es folgen dann die Textbausteine, die in SWM unter Meldungstexte bearbeiten hinterlegt sind.

    Im Contao-Template-Ordner legt man nun für jeden der beiden Parameter eine php-Datei an (z.B. swm_get_pagemessage.php) mit folgendem Inhalt:

    Code:
    <?php 
      echo (\Input::get('PAGEMESSAGE');
    ?>
    Auf der Contao-Meldungsseite, die zu Beginn schon angelegt wurde, kann man diese Datei nun in einem Text-Inhaltselement mit einem include-Befehl einfügen:

    Code:
    {{file::swm_get_pagemessage.php}}
    Für ERRORPAGEMESSAGE verfährt man genauso.

    Bei der Übergabe des Meldungstextes wird nun von SWM der komplette Textbaustein in die URL geschrieben. Mit dem Input-Befehl wird der Textbaustein in Contao aus der URL extrahiert und dann auf der Seite ausgegeben. Dieses Verfahren hat meiner Meinung nach folgende Nachteile:

    • Die URL werden ziemlich lang. Das ist aber kein Problem, weil die Browser URL bis 2.000 Zeichen und mehr verarbeiten.
    • Einigen Texten wird ein Zeilenumbruch (<br /> angefügt. Diese werden in der URL kodiert und erscheinen dann auf der Contao-Meldungsseite nicht als Zeilenumbruch, sondern als normaler Text. Das sieht nicht gut aus.
    • Mit einer entsprechend modifizierten URL, die z.B. auf einer gemeinen Website hinterlegt ist, lässt sich beliebiger Text auf die Website bringen. Das könnte zu Verwirrungen führen.



    Deshalb habe ich etwas anderes überlegt.

    Fortsetzung folgt ...

  5. #5
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    Standard

    Meldungsseiten in Contao (Teil 2)

    Die Idee ist, dass SWM nicht mehr die Texte übergibt, sondern nur zweistellige Zahlen: eine Zahl für jeden Textbaustein. In SWM erzeugt man unter Meldungstexte bearbeiten einen Satz neuer Meldungstexte, die man z.B. Contao nennt.

    Jeder Textbaustein wird durch eine zweistellige Nummern ersetzt (10, 11, 12, ...). Vor jeder Nummer habe ich als Trennzeichen eine Tilde (~) gesetzt. Wird also eine Fehlermeldung mit zwei Textbausteinen übergeben, dann steht in der URL u.a.: ERRORPAGEMESSAGE=~10~12

    Die in Teil 1 schon beschriebene php-Datei wird nun so erweitert, sie a) die Zahlen extrahiert, b) überprüft, ob es überhaupt Zahlen sind und die dazugehörige Meldungen ausgibt. Wobei es natürlich keine echte Zahlen sind, sondern Strings. Hier die Datei für die Fehlermeldungen.

    Code:
    <?php 
      $Eingabe = substr(\Input::get('ERRORPAGEMESSAGE', '~00'), 0, 200);
      $Korrigieren = false;
      
      $EingabeArray = explode("~", $Eingabe);
      If (!empty($EingabeArray))
      {
        $EingabeArray[0] = "00";  // Wenn Eingabe mit ~ beginnt, ist das leer, wenn nicht, ist der Inhalt nicht relevant
        
        foreach ($EingabeArray as $meldung) 
        {
          If (strlen ($meldung) >= 2) 
          { 
              $meldung = substr($meldung, 0, 2);
              
              if (is_numeric($meldung))
              {
                
                  if ($meldung == "00") { ; }  //Parameter fehlt oder EingabeArray[0] oder es wurde ~00 übergeben
                  else if ($meldung == "10") { echo "Da ist ein Fehler in der E-Mail-Adresse.<br />"; $Korrigieren = true; } 
                  else if ($meldung == "11") { echo "Sie müssen alle Felder ausfüllen, die ein * haben: <br />"; $Korrigieren = true; }
                  else if ($meldung == "12") { echo "Es ist ein Fehler aufgetreten:"; }
                  else if ($meldung == "13") { echo "Sie müssen der Datenschutzerklärung zustimmen.<br />"; $Korrigieren = true; }
                  else if ($meldung == "20") { echo "Vielen Dank für Ihre Anmeldung."; }
                  else if ($meldung == "21") { echo "Vielen Dank für Ihre Anmeldung. <br /><br />Ihnen wurde soeben eine E-Mail mit einem Bestätigungslink zugesendet. <br />Sie müssen auf diesen Link klicken um die Anmeldung abzuschließen."; }
                  else if ($meldung == "22") { echo "Die Anmeldung zu unserem Verteiler wurde erfolgreich abgeschlossen."; }
                  else if ($meldung == "23") { echo "Die Anmeldung an unserem Verteiler konnte nicht erfolgreich abgeschlossen werden. <br />Melden Sie sich bitte erneut mit Ihrer E-Mail-Adresse an."; }
                  else if ($meldung == "24") { echo "Sie haben sich bereits erfolgreich an unserem Verteiler angemeldet."; }
                  else if ($meldung == "25") { echo "Ihre E-Mail-Adresse befindet sich bereits in unserem Verteiler."; }
                  else if ($meldung == "26") { echo "Ihre E-Mail-Adresse wurde gesperrt."; }
                  else if ($meldung == "27") { echo "Geben Sie das angezeigte Wort korrekt ein.<br />"; $Korrigieren = true; }
                  else if ($meldung == "28") { echo "Bitte wählen Sie eine Gruppe.<br />"; $Korrigieren = true; }
                  else if ($meldung == "30") { echo "Ihre E-Mail-Adresse wurde aus dem Verteiler gelöscht."; }
                  else if ($meldung == "31") { echo "Ihre E-Mail-Adresse wurde zur Austragung vorgesehen. Es wurde Ihnen soeben eine E-Mail mit einem Bestätigungslink zugesendet. Klicken Sie auf diesen Bestätigungslink um die Austragung abzuschließen."; }
                  else if ($meldung == "32") { echo "Ihre E-Mail-Adresse wurde erfolgreich aus unserem Verteiler ausgetragen."; }
                  else if ($meldung == "33") { echo "Ihre E-Mail-Adresse konnte nicht aus unserem Verteiler entfernt werden. <br /><br />Entweder wurde diese bereits gelöscht oder Sie müssen sich wegen zu langer Wartezeit nochmals abmelden."; }
                  else if ($meldung == "34") { echo "Ihre E-Mail-Adresse befindet sich nicht in unserem Verteiler."; }
                  else if ($meldung == "40") { echo "Die E-Mail-Adresse fehlt.<br />"; $Korrigieren = true; }
                  else if ($meldung == "41") { echo "Sie müssen das gewünschte E-Mail-Format wählen.<br />"; $Korrigieren = true; }
                  else { echo "INTERNER HINWEIS 1: Ein Hinweistext ", $meldung, " ist nicht definiert."; }
              }
          }
        }
          unset($meldung);
          if ($Korrigieren) { echo "<br />Bitte gehen Sie zur Eingabeseite zurück und versuchen Sie es noch einmal ...<br />"; }
      }
    ?>
    Die Datei für die Infomeldungen erhält man, wenn man in der php-Datei den Pararmeter ERRORPAGEMESSAGE gegen PAGEMESSAGE austauscht. Ich habe in beiden Dateien alle Textbausteine drin gelassen, weil ich nicht genau weiß, welcher Textbaustein zu welchem Parameter gehört. Bisher ist es mir nur bei der Fehlermeldung aufgefallen, dass es zwei Textbausteine pro Parameter geben kann. Deshalb gibt es die Schleifenkonstruktion.

    Besonders verwirrend war für mich, dass der explode-Befehl in Array[0] einen leeren String ablegt, wenn die Eingabe mit dem Trennsymbol ~ beginnt. Aber wenn man es weiß, ist es logisch.

    Vielleicht hilft das ja mal jemandem.

    Grüße
    Fryd

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •