Extras - Newsletter: Anleitung, Bugfix, Neu, Multilanguage

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Extras - Newsletter: Anleitung, Bugfix, Neu, Multilanguage

Beitrag von HerrB » Di 4. Mai 2004, 15:19

Jetzt habe auch ich den Newsletter mal eingesetzt und das eine oder andere Problem bemerkt (dazu gibt es auch schon zahlreiche Threads...).

Daher hier eine Anleitung für die Verwendung des Newsletters. Das Ganze basiert auf der sehr guten Anleitung auf http://www.x28.de (bzw. http://www.cms-webdesign-service.de/fro ... ?idcat=213) und Contenido V4.4.3, V4.4.4 bzw. V4.4.5.

Für die Blinden unter den Einäugigen: Bitte die Contenido-Version beachten: V4.4.3, V4.4.4 oder V4.4.5! :wink:

In V4.6 sind die Module bereits integriert.

Hinweis: Es gibt bereits eine alte Version dieses Moduls (V1.0) im Bereich Bugs 4.4 - diese ist nicht mit dieser Version kompatibel (und sollte nicht mehr verwendet werden)!

Folgende Probleme wurden behoben:
- Bestätigungsmail aktiviert zwar Empfänger, aber bestätigt ihn nicht
- Verwendung identischer E-Mail-Adressen in unterschiedlicher Schreibweise (Groß-/Kleinbuchstaben) möglich
- Eintragung einer leeren E-Mail-Adresse möglich
- Pausieren (STOP), weiter (GOON) und abmelden (UNSUBSCRIBE) funktionieren nicht
- Eingabe von Name und E-Mail-Adresse sehr empfänglich für SQL-Injection (IMHO Sicherheitslücke)
- Mehrere Mandanten werden nur bedingt, mehrere Sprachen gar nicht unterstützt.

Ich bin kein Experte, deswegen würde ich gerne "die Profis" bitten, die Änderung in Bezug auf SQL-Injection zu bewerten...

Damit alles funktioniert, müssen auch Dateien in Contenido geändert werden - vielleicht findet das ja Eingang in eine der kommenden Versionen...

Hinweis: Es ist möglich, den Newsletter ohne so tiefgreifende Änderungen zu verwenden (z.B., wenn bereits Empfänger für Newsletter eingetragen sind). Weiter unten gibt es entsprechende Hinweise.

Achtung: Einige der folgenden Änderungen verändern die Art und Weise, wie der Empfänger-Name und die E-Mail-Adresse in der Datenbank gespeichert werden - damit sollten die Schritte nur für Systeme durchgeführt werden, bei denen noch keine Emfänger vorhanden sind. Ausserdem werden einige Änderungen bei einer neuen Contenido-Version überschrieben - bitte selbst darauf achten...

Ablauf:
1. Modul anlegen (-> "Newsletter Blackbox")
Beschreibung:

Code: Alles auswählen

Newsletter-Modul V2.0

Handles all requests (subscribe, unsubscribe, pause, delete)
for newsletter subscriptions.
See thread on www.contenido.de/forum for details!!!

Based on the work of 4fb and www.x28.de.
Modified by HerrB, 04.05.2004
Eingabe: bleibt leer
Ausgabe:

Code: Alles auswählen

<?php 
  $from = "do-not-reply@domain.de "; /* Specify sender e-mail */
  $welcome_title = "Welcome";                /* Title of welcome newsletter, to deactivate function: use "" */

  switch ($lang):
    case 0: /* There is never a language with id 0, just an example */
      $msg = array ("txtMsgSubscribeHeader"  => "Newsletter: Confirmation",
                            "txtMsgSubscribe"            => "Dear user,\nto confirm your newsletter subscription please use this link:",
                            "txtMsgDeleteHeader"       => "Newsletter: Cancellation",
                            "txtMsgDelete"                 => "Dear subscriber,\nto cancel your newsletter subscription please use this link:",
                            "htmlErrNoEMail"              => "Please specify an e-mail adress.",
                            "htmlOKSubscribe"           => "Dear user,<br><br>you should get an e-mail in just a few seconds. Please confirm your newsletter subscription using the link provided in the e-mail.",
                            "htmlErrSubscribe"           => "This e-mail adress is already listed for the newsletter subscription.",
                            "htmlOKDelete"                => "Dear subscriber,<br><br>you should get an e-mail in just a few seconds. To confirm the cancellation of your newsletter subscription please use the link provided in the e-mail.",
                            "htmlErrDelete"                => "This e-mail adress doesn't receive our newsletter.",
                            "htmlOKConfirm"              => "Operation successful, thank you!<br><br>You are now member of the big family of subscribers to our newsletter.",
                            "htmlOKConfirmWelcome" => " Even the welcome newsletter is on the way to you!",
                            "htmlErrConfirm"              => "Operation not successful!<br><br>Your account hasn't been confirmed for the newsletter subscription.",
                            "htmlOKStop"                   => "Operation successful, you will not get our newsletter until you decide to do so again.",
                            "htmlErrStop"                   => "Operation not successful!<br><br>Your account doesn't take a break from newsletter subscription.",
                            "htmlOKGoOn"                 => "Operation successful. We are happy to send you our newsletter again.",
                            "htmlErrGoOn"                 => "Operation not successful!<br><br>Your account hasn't been reactivated again.",
                            "htmlOKUnsubscribe"        => "We confirm the cancellation of the newsletter subscription.",
                            "htmlErrUnsubscribe"        => "Operation not successful!<br><br>Your newsletter subscription hasn't been cancelled.");
      break; 
    default: /* Use this area for your preferred (or your one and only) language */
      $msg = array ("txtMsgSubscribeHeader"   => "Newsletter: Bestätigung",
                            "txtMsgSubscribe"             => "Sehr geehrter Interessent,\num Ihre Teilnahme am Newsletter zu bestätigen, klicken Sie bitte auf den unten stehenden Link:",
                            "txtMsgDeleteHeader"       => "Newsletter: Abbestellen",
                            "txtMsgDelete"                 => "Sehr geehrter Newsletter-Abonnent, \num den Newsletter zu kündigen, klicken Sie bitte auf untenstehenden Link:",
                            "htmlErrNoEMail"              => "Bitte geben Sie eine E-Mail-Adresse an.",
                            "htmlOKSubscribe"           => "Sehr geehrter Interessent,<br><br>Sie erhalten gleich eine E-Mail. Bitte bestätigen Sie Ihre Teilnahme am Newsletter.",
                            "htmlErrSubscribe"           => "Diese E-Mail-Addresse ist bereits für den Newsletter eingetragen.",
                            "htmlOKDelete"                => "Sehr geehrter Abonnent,<br><br>Sie erhalten gleich eine eMail. Bitte bestätigen Sie die Kündigung des Newsletters.",
                            "htmlErrDelete"                => "Diese E-Mail-Addresse ist nicht für den Newsletter eingetragen.",
                            "htmlOKConfirm"              => "Aktion erfolgreich, vielen Dank!<br><br>Sie gehören nun zum Kreis der Newsletter-Abonnenten.",
                            "htmlOKConfirmWelcome" => " Bereits unser Willkommens-Newsletter ist auf dem Weg zu Ihnen!",
                            "htmlErrConfirm"              => "Aktion fehlgeschlagen!<br><br>Newsletter-Account konnte nicht bestätigt werden.",
                            "htmlOKStop"                   => "Ihr Newsletter-Abonnement pausiert.",
                            "htmlErrStop"                   => "Aktion fehlgeschlagen!<br><br>Newsletter-Account konnte nicht pausiert werden.",
                            "htmlOKGoOn"                 => "Aktion erfolgreich. Wir senden Ihnen gerne wieder unseren Newsletter.",
                            "htmlErrGoOn"                 => "Aktion fehlgeschlagen!<br><br>Newsletter-Account konnte nicht reaktiviert werden.",
                            "htmlOKUnsubscribe"        => "Wir bestätigen hiermit die Kündigung Ihres Newsletter-Abonnements.",
                            "htmlErrUnsubscribe"        => "Aktion fehlgeschlagen!<br><br>Newsletter-Account wurde nicht gekündigt.");
  endswitch;

$rcp_id = 0;
$rcp_found = false; 

if ($action == "subscribe") 
{
  if (!isset($email) || !$email) {
    echo $msg["htmlErrNoEMail"];
  } else {
    $encoded_email = urlencode(strtolower($email));
    $sql = "SELECT idnewsrcp FROM ".$cfg["tab"]["news_rcp"] ." WHERE email = '$encoded_email' AND idclient='$client' AND idlang='$lang'"; 
  
    $db->query($sql); 
    if (!$db->next_record()) 
    { 
      $body = $msg["txtMsgSubscribe"]."\n".$cfgClient[$client]["path"]["htmlpath"]."front_content.php?changelang=".$lang."&idcatart=".$newsletteridcatart."&confirm=".md5($encoded_email)."\n\n"; 

      $timestamp = date("Y-m-d H:i:s"); 
      $sql = "INSERT INTO ".$cfg["tab"]["news_rcp"] ." SET idnewsrcp = '".$db->nextid($cfg["tab"]["news_rcp"])."', idclient='$client', idlang='$lang', author='website', email='$encoded_email', name='".urlencode($emailname)."', deactivated='1', created='$timestamp'"; 
      $db->query($sql); 

      mail("$email", $msg["txtMsgSubscribeHeader"], "$body", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/" . phpversion()."]"); 

      echo $msg["htmlOKSubscribe"]; 
    } else { 
      echo $msg["htmlErrSubscribe"]; 
    }
  } 
} 

if ($action == "delete") 
{
  if (!isset($email) || !$email) {
    echo $msg["htmlErrNoEMail"];
  } else { 
    $encoded_email = urlencode(strtolower($email));
    $sql = "SELECT idnewsrcp FROM ".$cfg["tab"]["news_rcp"] ." WHERE email = '$encoded_email' AND idclient='$client' AND idlang='$lang'"; 
  
    $db->query($sql); 
    if ($db->next_record()) 
    { 
      $body = $msg["txtMsgDelete"]."\n".$cfgClient[$client]["path"]["htmlpath"]."front_content.php?changelang=".$lang."&idcatart=".$newsletteridcatart."&unsubscribe=".md5($encoded_email)."\n\n"; 

      mail("$email", $msg["txtMsgDeleteHeader"], "$body", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/" . phpversion()."]"); 

      echo $msg["htmlOKDelete"]; 
    } else { 
      echo $msg["htmlErrDelete"]; 
    }
  } 
} 

if (strlen($confirm) == 32) 
{ 
  $sql = "SELECT idnewsrcp, name, email FROM ".$cfg["tab"]["news_rcp"] ." WHERE idclient='$client' AND idlang='$lang' AND confirmed = '0'"; 
  $db->query($sql); 

  while (!$rcp_found && $db->next_record()) 
  { 
    if ($confirm == md5($db->f("email"))) 
    { 
      $rcp_found = true;
      $rcp_id = $db->f("idnewsrcp");
      $name = urldecode($db->f("name"));
      $encoded_email = $db->f("email");
      $to = urldecode($encoded_email);
      /* If no name given, use e-mail as name */
      if (empty($name)) {
        $name = $to;
      }
    } 
  }
  if ($rcp_found) {
    $sql = "UPDATE " .$cfg["tab"]["news_rcp"] ." SET confirmed = '1', deactivated = '0' WHERE idnewsrcp = '".$rcp_id."'"; 
    $db->query($sql); 
    echo $msg["htmlOKConfirm"];
    if ($welcome_title != "") {
      $sql = "SELECT * FROM ".$cfg["tab"]["news"]." WHERE idclient='$client' AND idlang='$lang' AND name='$welcome_title'";
      $db->query($sql);
      if ($db->next_record()) {
        $from    = $db->f("newsfrom");
        $subject = $db->f("subject");
        $message = $db->f("message");
        $date    = $db->f("newsdate");
        $dateday = $date[8].$date[9].".".$date[5].$date[6].".".$date[0].$date[1].$date[2].$date[3];
        $time    = $date[11].$date[12].":".$date[14].$date[15].":".$date[17].$date[18];
      
        $sql = "SELECT idclient, htmlpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='$client'";
        $db->query($sql);
        $db->next_record();
        $path = $db->f("htmlpath")."front_content.php?changelang=".$lang."&idcatart=".$newsletteridcatart."&";
 
        $message = str_replace("MAIL_NUMBER", "1", $message); /* $number wird mit 1 gesetzt, da nur ein Empfänger */
        $message = str_replace("MAIL_DATE", "$dateday", $message);
        $message = str_replace("MAIL_TIME", "$time", $message);

        $message = str_replace("MAIL_NAME", "$name", $message);
        $message = str_replace("MAIL_UNSUBSCRIBE", $path."unsubscribe=".md5($encoded_email), $message);
        $message = str_replace("MAIL_STOP", $path."stop=".md5($encoded_email), $message);
        $message = str_replace("MAIL_GOON", $path."goon=".md5($encoded_email), $message);
    
        if (mail("$to", "$subject", "$message", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/".phpversion())) {
          echo $msg["htmlOKConfirmWelcome"];
        }
      }
    }
  } else {
    echo $msg["htmlErrConfirm"];
  } 
} 

if (strlen($stop) == 32) 
{ 
  $sql = "SELECT idnewsrcp, email FROM ".$cfg["tab"]["news_rcp"] ." WHERE idclient='$client' AND idlang='$lang'"; 
  $db->query($sql);

  while (!$rcp_found && $db->next_record()) 
  { 
    if ($stop == md5($db->f("email"))) 
    { 
      $rcp_found = true;
      $rcp_id = $db->f("idnewsrcp"); 
    } 
  }
  if ($rcp_found) {
    $sql = "UPDATE " .$cfg["tab"]["news_rcp"] ." SET deactivated = '1' WHERE idnewsrcp = '".$rcp_id."'"; 
    $db->query($sql); 
    echo $msg["htmlOKStop"];
  } else {
    echo $msg["htmlErrStop"];
  } 
} 

if (strlen($goon) == 32) 
{ 
  $sql = "SELECT idnewsrcp, email FROM ".$cfg["tab"]["news_rcp"] ." WHERE idclient='$client' AND idlang='$lang'"; 
  $db->query($sql);

  while (!$rcp_found && $db->next_record()) 
  { 
    if ($goon == md5($db->f("email"))) 
    { 
       $rcp_found = true;
       $rcp_id = $db->f("idnewsrcp");        
    } 
  }
  if ($rcp_found) {
    $sql = "UPDATE " .$cfg["tab"]["news_rcp"] ." SET deactivated = '0' WHERE idnewsrcp = '".$rcp_id."'"; 
    $db->query($sql); 
    echo $msg["htmlOKGoOn"];
  } else {
    echo $msg["htmlErrGoOn"];
  }  
} 

if (strlen($unsubscribe) == 32) 
{ 
  $sql = "SELECT idnewsrcp, email FROM ".$cfg["tab"]["news_rcp"] ." WHERE idclient='$client' AND idlang='$lang'"; 
  $db->query($sql); 

  while (!$rcp_found && $db->next_record()) 
  { 
    if ($unsubscribe == md5($db->f("email"))) 
    { 
       $rcp_found = true;
       $rcp_id = $db->f("idnewsrcp"); 
    } 
  }
  if ($rcp_found) {
    $sql = "DELETE FROM " .$cfg["tab"]["news_rcp"] ." WHERE idnewsrcp = '".$rcp_id."'"; 
    $db->query($sql); 
    echo $msg["htmlOKUnsubscribe"];

  } else {
    echo $msg["htmlErrUnsubscribe"];
  }   
} 
?> 
2. Legen Sie ein Template an. Nennen sie es ebenfalls "Newsletter Blackbox".
3. Nehmen Sie in einen Container das eben gespeicherte Modul "Newsletter Blackbox" auf.
4. Legen Sie einen neuen Artikel an. Empfehlenswert: In der Kategorie Hilfsnavigation. Benutzen Sie für den Artikel das Template Newsletter Blackbox. Speichern Sie den Artikel.
5. Öffnen Sie die Eigenschaften des Artikels. Notieren Sie sich die Artikelnummer.
6. Neu: Nehmen Sie in der Mandanten-config.php (z.B. cms/config.php) die folgenden Eingaben vor (Artikelnummer aus 5. eintragen):

Code: Alles auswählen

/* idcatart of the newsletter control page */
$newsletteridcatart = "794";
Empfohlen wird unterhalb von load_lang bzw. load_client.

7. Legen Sie ein neues Modul an. Nennen Sie es "Newsletter Eingabe".
Beschreibung:

Code: Alles auswählen

Newsletter Subscription Module V2.0

Provides multilanguage form for newsletter
subscribing and cancellation.
See thread on www.contenido.de/forum for details!!!

Based on the work of 4fb and www.x28.de.
Modified by HerrB, 04.05.2004
Eingabe: bleibt leer
Ausgabe:

Code: Alles auswählen

<?php
  switch ($lang):
    case 0: /* There is never a language with id 0, just an example */
      $msg = array ("htmlName"       => "Your name:",
                            "htmlEMail"        => "Your e-mail:",
                            "txtSubscribe"    => "Subscribe",
                            "txtUnsubscribe" => "Cancel",
                            "txtOK"              => "OK");
      break; 
    default: /* Use this area for your preferred (or only) language */
      $msg = array ("htmlName"       => "Ihr Name:",
                            "htmlEMail"        => "Ihre eMail-Adresse:",
                            "txtSubscribe"    => "Anmelden",
                            "txtUnsubscribe" => "Abmelden",
                            "txtOK"              => "OK");
  endswitch;
?> 
<form name="frmNewsletter" method="post" action="<?php echo "front_content.php?changelang=".$lang ?>">
  <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
      <td><?php echo $msg["htmlName"]; ?></td> 
      <td><input name="emailname" type="text"></td> 
    </tr> 
    <tr> 
      <td><?php echo $msg["htmlEMail"]; ?></td> 
      <td><input name="email" type="text"><input type="hidden" name="idcatart" value="<?php echo $newsletteridcatart; ?>"></td> 
    </tr> 
    <tr> 
      <td>&nbsp;</td> 
      <td><select name="action" id="action"> 
          <option value="subscribe" selected><?php echo $msg["txtSubscribe"]; ?></option> 
          <option value="delete"><?php echo $msg["txtUnsubscribe"]; ?></option> 
        </select></td> 
    </tr> 
    <tr> 
      <td>&nbsp;</td> 
      <td><input name="subscribe" type="submit" id="subscribe" value="<?php echo $msg["txtOK"]; ?>"></td> 
    </tr> 
  </table> 
</form>
8. Verwenden Sie das neue Modul in einem Template.
9. Benennen Sie mit einem FTP-Programm die folgenden Dateien im Verzeichnis contenido\includes um, z.B. in .old:
include.newsletter_send.php
include.recipients_edit.php
include.recipients_menu.php
10. Laden Sie die folgende Datei herunter, entpacken Sie die Datei und übertragen Sie die Dateien in das Verzeichnis contenido\includes:
http://www.btech.de/temp/newsletter2/source445.zip
11. Schon fertig ;-)
(12.) Optional: Willkommens-Newsletter in Contenido erzeugen und Namen dieses Newsletters im Modul aus 1. bei $welcome_title eintragen - oder vorhanden Namen durch "" ersetzen, um diese Funktion zu deaktivieren.

Durchgeführte Änderungen:
- Berücksichtigung unterschiedlicher Sprachen in beiden Modulen.
- Die Speicherung des Namens und der E-Mail-Adresse erfolgt nach Kodierung mit urlencode (ich hoffe, das reicht). Auch der md5-Hash-Wert wird aus der kodierten E-Mail-Adresse erzeugt.
- Die Datei news.php wird nicht mehr verwendet, stattdessen wird direkt der Artikel (mit Newsletter Blackbox) aufgerufen.
- Die Links, die verschickt werden, enthalten nun den direkten Verweis auf den Artikel in der Sprache des Newsletters.
- Scheitert STOP, GOON, UNSUBSCRIBE oder DELETE aus unbekanntem Grund, wird der Nutzer darüber informiert (Fehlermeldungen können im Modul "Newsletter Blackbox" angepasst werden).
- In Contenido werden Name und E-Mail-Adresse mit urldecode zurückkonvertiert (zusätzlich wurde die Suche entsprechend angepasst).

Bekannte Fehler:
- urlencode kodiert laut Spez. kein - und es gibt da einen SQL-Kommentar mit --...
- ' wird zwar kodiert, jedoch als \' danach wieder hergestellt.

Bekannte Probleme:
SQL-Fehlermeldungen:
Bei einem Update von älteren Contenido-Versionen werden u.U. benötigte Spalten nicht erzeugt. Sollten also SQL-Fehlermeldungen auftreten, sollte die Tabelle <prefix>_news_rcp auf die Anwesenheit der Spalten confirmed und hash überprüft werden (z.B. mit phpMyAdmin: http://www.phpmyadmin.net).

Sollten die Spalten fehlen (<Prefix> geeignet ersetzen, Standard: con):

Code: Alles auswählen

ALTER TABLE `<Prefix>_news_rcp` ADD `confirmed` TINYINT( 1 ) DEFAULT '0' NOT NULL AFTER `lastmodified`;
ALTER TABLE `<Prefix>_news_rcp` ADD `hash` VARCHAR(32) NOT NULL ;
Anpassungen, wenn Newsletter-Empfänger bereits vorhanden oder tiefgreifende Änderungen nicht gewünscht:
Sind bereits Empfänger eingetragen, könnte man ein Update versuchen: Contenido-Dateien wie beschrieben umbenennen und durch neue Versionen ersetzen. Nun in Contenido alle Empfänger einmal öffnen und mit OK speichern (ich habe es aber nicht getestet).

Ansonsten könnte man aus allen zum Download angegebenen Dateien und in den Modulen urlencode und urldecode entfernen.

Hinweis zum Modul-Update (alte Version -> diese Version):
Nur die Datei include.newsletter_send.php muss ausgetauscht werden und die Module aktualisiert werden. Es muss an alle Empfänger ein Newsletter mit den entsprechenden Links gesendet werden, damit die Nutzer die neuen Links nutzen können (und die alten nicht mehr einsetzen). Es wird empfohlen, die Datei news.php im Mandanten-Verzeichnis umzubenennen oder zu löschen.

Damit die Änderungen in den Modulen wirksam werden, muss für alle Sprachen eines Mandanten das Template dem Artikel bzw. der Kategorie erneut zugewiesen werden!!! Auch bei zukünftigen Änderungen: Sprache 1 einstellen, Template bestätigen, Sprache 2 einstellen, Template bestätigen... usw.

Mehrsprachige Mandanten:
Zur Verwendung mehrerer Sprachen die komplette Vorlage für ID 0 von "Case" bis "break;" kopieren, einfügen und mit Sprach-ID versehen. Beispiel:

Code: Alles auswählen

  ...
  switch ($lang):
    case 0: /* There is never a language with id 0, just an example */
      $msg = array ("htmlName"          => "Your name:",
                            "htmlEMail"           => "Your e-mail:",
                            "txtSubscribe"    => "Subscribe",
                            "txtUnsubscribe" => "Cancel",
                            "txtOK"              => "OK");
      break; 
    case 5: /* <<<<< Sprache 5 >>>>> */
      $msg = array ("htmlName"          => "Your name:",
                            "htmlEMail"           => "Your e-mail:",
                            "txtSubscribe"    => "Subscribe",
                            "txtUnsubscribe" => "Cancel",
                            "txtOK"              => "OK");
      break; 
    default: /* Use this area for your preferred (or one and only) language */
      ...
Wird eine Sprach-ID übergeben, die nicht berücksichtigt ist, werden die Einträge unter "default" verwendet - d.h. dass die Einträge zu "default" der Standardsprache entsprechen und immer angepasst werden sollten.

Die "txt..."-Variablen enthalten den Text, der in die Mail eingefügt oder für Schaltflächen verwendet wird (kein HTML empfohlen). Die "html..."-Variablen enthalten den Text, der in der Seite angezeigt wird - damit kann es auch HTML sein.

Um es zu testen, kann das Anmeldeformular direkt (= Standardsprache) oder mit front_content.php?changelang=<Sprach-ID>... aufgerufen werden. Bitte beachten, dass bei Änderungen in den Modulen die Templates erneut zugewiesen werden müssen.

Was noch wichtig ist: Newsletter-Empfänger sind sprachgebunden. Wünscht ein Nutzer mehrere Sprachen, muss er sich auch für jede Sprache einzeln anmelden (und die Anmeldung jeweils bestätigen). Es muss für jede Sprache ein separater Newsletter erstellt und versendet werden. Wenn das Feature "Welcome-Newsletter" genutzt werden soll, muss für jede Sprache ein Welcome-Newsletter (mit dem gleichen Namen) erstellt werden.

Ich hoffe, ich habe nichts vergessen; alles auf eigene Gefahr (Backup...).

Viel Erfolg!

Gruß
HerrB
Zuletzt geändert von HerrB am Di 1. Nov 2005, 17:17, insgesamt 10-mal geändert.

hubert
Beiträge: 25
Registriert: Fr 14. Nov 2003, 18:59
Wohnort: Innsbruck
Kontaktdaten:

Beitrag von hubert » Mi 5. Mai 2004, 09:31

Vorerst DANKE für diese multilinguale Version:
Habe meine vorige Version dieses Moduls genau nach Anleitung erneuert!
Dabei ist mir folgendes aufgefallen:
Der Link
http://www.btech.de/temp/newsletter2/in ... nu.php.txt
funktioniert nicht. Dabei wird auf eine Datei "include.recipients_left_top.php" verwiesen! Muss man die erneuern?

Da ich aber "nur" das Update auf die neue Version gemacht habe, war diese Datei (lt. Anweisung) nicht nötig.

Das Problem bei mir ist nur, dass die dt. (=default) Anmeldung/Abmeldung, wie bisher, wunderbar klappt. Im engl. Sprachteil ist der EingabeArtikel auch in der entsprechenden Sprache, NUR wird immer die "Blackbox" aus dem "dt. Bereich" aufgerufen und auch der Eintrag erfolgt (dementsprechend) dort!
Ich habe ALLE Templates, Artikel, etc... bereits neu erstellt, habe die Reihenfolge der Zuordnung peinlichst genau beachtet und trotzdem geht's nicht!
Kann's an den nicht vollständig erneuerten Dateien (in contenido/includes) liegen? Ich habe nur die "include.newsletter_send.php" erneuert!
Danke für die Bemühungen!
:wink: Hubert

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 5. Mai 2004, 11:58

Den Link hatte ich heute früh korrigiert, man sollte jetzt die richtige Datei erhalten (allerdings ist die Datei aus Version V1.0 ausreichend).

Das mit der Sprache hatte ich auch schon, das verschwand beim Testen, nun ja. :roll:

Ich kann es gerade nicht austesten, aber ändere die Zeile

Code: Alles auswählen

<form name="frmNewsletter" method="post" action="front_content.php">
aus dem Anmelde-Modul in

Code: Alles auswählen

<form name="frmNewsletter" method="post" action="<?php echo "front_content.php?changelang=".$lang ?>">
und weise das Template dem Atrtikel/der Kategorie erneut zu.

Wenn es nicht klappt, teste ich das heute Nachmittag nochmal.

Gruß
HerrB

hubert
Beiträge: 25
Registriert: Fr 14. Nov 2003, 18:59
Wohnort: Innsbruck
Kontaktdaten:

WAU.....

Beitrag von hubert » Mi 5. Mai 2004, 16:47

:lol: EIN SUPER MODUL!!!!!
:wink: es funktioniert!!!!
"Tiefe Verneigung" und DANKE!!!

Hubert

dibu
Beiträge: 13
Registriert: Sa 7. Feb 2004, 04:55
Kontaktdaten:

EMail Überprüfung funktioniert nicht

Beitrag von dibu » Di 25. Mai 2004, 19:22

Hallo HerrB,

ist echt ein super Modul, könnt noch die Überprüfung und ggf. die Fehlermeldung bei falscher E-Mail mit ausgegeben werden.

Wenn im Feld E-Mail z.B. test drin steht wird der Newsletter auch dahin versendet :wink:

CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan » Mi 26. Mai 2004, 11:00

wieso kriege ich das modul bei mir nicht zum laufen?
ich habe die beiden module erstellt, jeweils einen artikel mit den templates erstellt, die config.php geändert und die 3 dateien hochgeladen. Wenn ich mich anmelden will kommt jedoch immer die fehlerseite ;-(

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mi 26. Mai 2004, 19:32

@dibu: Arbeite dran.

@CyberDan: Hast Du mal einen Link/Screenshot/Fehlermeldung...?

Gruß
HerrB

CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan » Mi 26. Mai 2004, 21:48

link habe ich keinen, ist noch lokal, im errorlog kommt auch nix an ;-(

screenshot ist glaube ich überflüssig, wenn ich mich für den newsletter anmelden will, werde ich auf die fehlerseite weitergeleitet.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 27. Mai 2004, 15:22

D.h. dass auf die Fehlerseite Deines Mandanten verwiesen wird oder auf die Fehlerseite "diese E-Mail wurde bereits registriert"?

Wenn es die Fehlerseite Deines Mandanten ist, würde ich mich freuen, wenn Du die Contenido-Version und Deine Mandanten-config.php posten könntest.

Gruß
HerrB

CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan » Do 27. Mai 2004, 15:31

Ja, es ist die Mandanten-Errorpage

Ich benutze Contenido 4.4.4

Meine Config:

Code: Alles auswählen

<?php

//path to contenido, for all inclusions
$contenido_path = "backend/";
$errorfont = "font3";
//fo the language file
$language="de";

/* Required: language and client */
$load_lang = "3";
$load_client = "7";

/* idcatart of the newsletter control page */ 
$newsletteridcatart = "97";


$frontend_debug["container_display"] = false;
$frontend_debug["module_display"] = false;
$frontend_debug["module_timing"] = false;

/*
* Uncomment this to benefit from the "alldebug" functionality :)

if ($HTTP_GET_VARS["alldebug"] == 1)
{
$frontend_debug["container_display"] = true;
$frontend_debug["module_display"] = true;
$frontend_debug["module_timing"] = true;
$force = 1;
} 
*/


?>

CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan » Do 27. Mai 2004, 15:39

so, ich habe jetzt nohcmal die controlpage mit modul erstellt, die alte gelöscht und die neue nummer in die config eingetragen. Jetzt geht die anmeldung, im BAckend sehe ich aber als angemeldeten User nur eine leere Zeile mit Mülleimer (Name wird nicht angezeigt). Wenn ich auf löschen klicke zeigt er mir zumindest die richtige mailadresse an... :?

edit: in der Datenbank steht der Name drin

edit2: in der DB kommt die Emailadresse mit %40 anstatt @ an. Wenn ich das durch das @ ersetze wird auch der Name im BAckend angezeigt. Außderdem wird beim Leerzeichen im Namen ein Pluszeichen eingefügt.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 27. Mai 2004, 17:15

Schön, das ist ja schon mal ein Anfang.

Die restlichen Sachen würde ich darauf zurückführen, dass Schritt 10 schief gelaufen ist (einspielen der geänderten Contenido-Dateien)...

Das @ und andere Sachen codiert werden, liegt an dem urlencode, welches ergänzt wurde.

Gruß
HerrB

CyberDan
Beiträge: 204
Registriert: Mo 15. Dez 2003, 13:01
Wohnort: Saarland
Kontaktdaten:

Beitrag von CyberDan » Do 27. Mai 2004, 18:05

bingo, das wars! Danke ;-))

Ich habe jetzt (zum 1000. mal) die 3 Dateien neu hochgeladen und dann gings. Muß mal mein ftp-proggi auf der Arbeit überprüfen :roll:

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 27. Mai 2004, 21:15

Super! Ansonsten werde ich das ganze noch für V4.5 überarbeiten, da wird es mit der Mehrsprachigkeit und der Konfiguration einfacher...

Und eine einfache E-Mail-Prüfung werde ich auch ergänzen...

Gruß
HerrB

sumsi
Beiträge: 39
Registriert: Do 30. Okt 2003, 16:40
Kontaktdaten:

Beitrag von sumsi » Fr 28. Mai 2004, 12:21

äh ich stell mich grad ein wenig dumm an, was muss ich machen um das urlencode da so einzustellen, dass die zeichen wie @ in der datenbank erscheinen?

Gesperrt