Extras - Newsletter: Anleitung, Modul, Neu, V4.5.x

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

Extras - Newsletter: Anleitung, Modul, Neu, V4.5.x

Beitrag von HerrB » Di 30. Nov 2004, 19:03

Edit HerrB, 30.10.2005: Dieser Beitrag wird nicht mehr unterstützt. Verwendet die Module, die mit V4.6 mitgeliefert werden oder die ggf. unter Module V4.6 zu finden sind.

Damit man alles beisammen hat, hier eine Anleitung zur Verwendung des Newsletters und Links zu den notwendigen Updates (hey, ich habe ganz fest vor, das in den FAQs zu ergänzen, snoopy :oops: . Ich hoffe, mein Account funktioniert noch).

Der Code in diesem Thread ist für V4.5.2 alpha und aktuellere V4.5 CVS-Snapshots geeignet (getestet bis 4.5 CVS vom 26.11.2004).

Achtung! Bis auf weiteres ist dieser Code auch nicht für V4.5.4 oder V4.5.5 geeignet!!!!

Damit ist dieser Thread !!! NICHT !!! für Contenido-Versionen kleiner V4.5.x geeignet. Der Code ist !!! NICHT !!! für V4.4.0, V4.4.1, V4.4.2, V4.4.3, V4.4.4 oder noch ältere Versionen geeignet.

Eine entsprechende Version dieses Threads für V4.4.3 und V4.4.4 findest Du hier: http://www.contenido.de/forum/viewtopic.php?t=4302

WARNUNG: Leider ist das Ganze für V4.5.x komplizierter. Bitte alle Texte, LiesMich.txt usw. aufmerksam durchlesen - wie immer gibt es keine Haftung. Na ja und Hilfe wie es die Zeit zulässt... :wink:

Das Ganze basiert ursprünglich auf der sehr guten Anleitung auf http://www.x28.de (bzw. http://www.cms-webdesign-service.de/fro ... ?idcat=213).

Hinweis: Es gibt bereits eine alte Version dieses Moduls (V2.0) im Bereich Module 4.4.4 - diese ist nicht mit dieser Version kompatibel (und sollte nicht mit V4.5.x verwendet werden)!

Vorbereitung (nur für V4.5.x NICHT FÜR CVS NACH 03.06.2005):
Damit dieses Modul verwendet werden kann, müssen die Contenido-Newsletter-Funktionen aktualisiert werden. Eine Anleitung und die notwendigen Dateien gibt es [nicht mehr, in V4.6 integriert].

Anleitung:

0. Notwendige Dateien runterladen (und entpacken): [kein Download, in V4.6 integriert]

1. Modul anlegen (-> "Newsletter Handler")
Code aus newsletter_handler.txt (Ordner V4.5.x) in die jeweiligen Bereiche einfügen (Kommentar, Eingabe, Ausgabe), Änderungen speichern
2. Wechseln Sie im Modul auf den Reiter "Übersetzung" und wählen Sie bei "Import from file" newsletter_handler_de.xml (Ordner Translation_de) aus und laden Sie sie hoch.
3. Legen Sie ein Template an. Nennen sie es ebenfalls "Newsletter Handler".
4. Nehmen Sie in einen Container das eben gespeicherte Modul "Newsletter Handler" auf.
5. Legen Sie einen neuen Artikel an. Empfehlenswert: In der Kategorie Hilfsnavigation. Benutzen Sie für den Artikel das Template Newsletter Handler. Speichern Sie den Artikel.
6. Schalten Sie den Artikel online.
7. Legen Sie ein neues Modul an. Nennen Sie es "Newsletter Form".
Code aus newsletter_form.txt in die jeweiligen Bereiche einfügen, Änderungen speichern
8. Wechseln Sie im Modul auf den Reiter "Übersetzung" und wählen Sie bei "Import from file" newsletter_form_de.xml aus und laden Sie sie hoch.
9. Verwenden Sie das neue Modul in einem Template.
10. Konfigurieren Sie jeweils die Artikel - dabei muss zumindest einmal der Handler-Artikel ausgewählt und gespeichert werden. Wird der Handler-Artikel bei der Konfiguration festgelegt, wird er an zentraler Stelle im System hinterlegt (Mandanten-Einstellungen).
11. Schon fertig ;-)

Durchgeführte Änderungen:
In dieser Version:
- Anpassung an V4.5.x
- Anpassung neue Newsletter-Klassen
- Anmeldung an Gruppen (Zuordnung muss z.Z. manuell im Backend erfolgen)
- Öffnen im neuen Fenster
- Prüfen der E-Mail-Adressen-Syntax
- Eintragen der Handler-Artikel-ID über die Mandanteneinstellungen entfällt, Festlegung erfolgt über Konfiguration
- Blättern durch Empfänger
- Suchen von Empfängern
- Auswahl nach Empfänger-Gruppe
- Frontend-User-Link

Bereits in der Vorversion geändert:
- 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 und Sprachen werden unterstützt.
- Berücksichtigung unterschiedlicher Sprachen in beiden Modulen.
- Die Speicherung des Namens und der E-Mail-Adresse erfolgt nach Kodierung mit urlencode. Als Identifizierungsschlüssel wird ein eindeutiger, jedoch zufälliger Schlüssel 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).

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;
ALTER TABLE `<Prefix>_news_rcp` ADD `hash` VARCHAR(32) NOT NULL ;
Mehrsprachige Mandanten:
Verwenden Sie die mitgelieferten XML-Dateien als Vorlage und übersetzen Sie sie. Wechseln Sie in die gewünschte Sprache, öffnen Sie das Modul, wechseln Sie auf den reiter "Übersetzung" und laden Sie Ihre neue Sprache hoch.

Die "txt..."-Angaben enthalten den Text, der in die Mail eingefügt oder für Schaltflächen verwendet wird (kein HTML empfohlen).

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

P.S.: So sollte es ungefähr aussehen:
Bild
Bild
Bild
Bild
Bild
Bild
Bild
Bild
Zuletzt geändert von HerrB am So 30. Okt 2005, 13:48, insgesamt 9-mal geändert.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 2. Dez 2004, 10:23

ad -> Prüfen der E-Mail-Adressen-Syntax

in function.general.php existiert die
funktion isValidMail

könntest du dafür hernehmen...
*** make your own tools (wishlist :: thx)

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Mo 13. Dez 2004, 13:17

Hallo,

ich habe gerade einmal die Contenidoversion 4.5.2a auf einem Server installiert und dann alle Einstellungen und änderungen wie in der anleitung beschrieben waren duchgeführt. Das Eintragen in die Newsletterliste und das versenden an diese Emailadressen funktioniert einwandfrei. Leider kann ich Emailadressen nicht austragen bzw. über das Backend löschen.
Im Errorlog steht:

Code: Alles auswählen

PHP Fatal error:  Call to undefined function:  
_setjoinpartner() in /home/htdocs/web5/html/contenido/contenido/classes/class.newsletter.groups.php on line 123
Das anlegen von Gruppen funktioniert leider ebenfalls nicht. Vieleicht könnt ihr mir sagen ob ich etwas falsch gemacht habe...

Vielen Dank im Voraus

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

Beitrag von HerrB » Mo 13. Dez 2004, 20:29

Schön, die Funktion fehlt in V4.5.2 Alpha also noch. Schön.

Kommentiere in der class.newsletter.groups.php (Bestandteil der Newsletter-Core-Dateien) in der Klasse "RecipientGroupMemberCollection" (unten) in der Funktion "function RecipientGroupMemberCollection()"

die folgenden Zeilen aus:

Code: Alles auswählen

$this->_setJoinPartner ('RecipientGroupCollection');
$this->_setJoinPartner ('RecipientCollection');
D.h. ändere in:

Code: Alles auswählen

// $this->_setJoinPartner ('RecipientGroupCollection');
// $this->_setJoinPartner ('RecipientCollection');
Es sollte dann funktionieren. Danke für die Fehlerbeschreibung.

Gruß
HerrB

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Mo 13. Dez 2004, 21:00

Danke für die schnelle Hilfe, nun funktioniert das löschen.

yui
Beiträge: 140
Registriert: Di 17. Jun 2003, 17:55
Kontaktdaten:

Beitrag von yui » Di 14. Dez 2004, 15:01

Ahoi,

die Anleitung habe ich laaangsam gelesen und in dem gleichen Tempo umgesetzt :) , doch so richtig laufen tut das Modul nicht, auch im 2ten Anlauf nicht.

Zunächst fällt mir auf, dass der Import der Sprachdatei blackbox_ger.xml nicht funktioniert im Gegensatz zur subscription_ger.xml. Ich habe die Bezeichnungen dann "zu Fuss" eingetragen.

Rufe ich dann das Formular auf und geben die Daten ein und schicke es ab, wird die Seite nicht zuende geladen. (Ich habe einmel das Modul von der 4.4.4 verwendet und damit funktioniert zumindest das Laden der ersten Antwortseite "Sehr geehrter Interessent, Sie erhalten..."

Klicke ich dann in der Bestätigungsmail den Link an, lande ich auf der Startseite, obwohl ich in den Mandanten "Newsletter idcatart [richtigeNummer]" eingegeben habe.

Mich beschleichen Zweifel, ob meine hier beschriebene Fehlermeldung Euch weiter hilft. Sollte ich also etwas vergessen haben, liefere ich das gerne nach.

Schöne Grüsse
yui

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

Beitrag von HerrB » Di 14. Dez 2004, 21:56

Fangen wir mit den Standardfragen an:
- Welche Contenido-Version?
- Welche Fehlermeldung/welches Problem gab es beim Importieren der XML-Datei (hat zwar mit Deinen Problemen nix zu tun, aber ist trotzdem interessant... :wink: )
- Meldungen im Errorlog (Administration -> System)

Spezielle Fragen:
- Hast Du bereits die Korrektur (siehe oben) durchgeführt?
- Kann man sich die Anmeldeseite irgendwo ansehen?

Bitte verwende nicht die Dateien/Module aus V4.4.4 - die sind definitiv, wirklich, echt, nicht kompatibel mit dieser Version und erzeugen für die V4.5.2 fehlerhafte Einträge.

Gruß
HerrB

P.S.: Habe sogar ein einfaches Newsletter-Archiv für Dich - wenn es geht :wink:

yui
Beiträge: 140
Registriert: Di 17. Jun 2003, 17:55
Kontaktdaten:

Beitrag von yui » Mi 15. Dez 2004, 09:49

Guten Morgen HerrB,

-ich verwende die Version 4.5.2-Alpha,
-die Fehlermeldung für den XML-Import, ich habe eben noch einmal versucht, meine Datei, die ich exportiert hatte, zu importieren:
PHP Fatal error: Call to undefined function: error() in /homepages/46/d18843850/htdocs/cms/contenido/classes/class.xmlparser.php on line 571

-Die Fehlermeldung nach dem Absenden der Newsletteranforderung:
PHP Fatal error: Call to undefined function: _setjoinpartner() in /homepages/46/d18843850/htdocs/cms/contenido/classes/class.newsletter.groups.php on line 123

Spezielle Antworten: Welche Korrekturen meinst Du? Jedenfalls habe ich jetzt das Blackboxmodul wieder "auf 4.5.2-Alpha" gesetzt.

Den Rest gibts per PM.

yui

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

Beitrag von HerrB » Mi 15. Dez 2004, 10:28

Den XML-Fehler gucke ich mir nochmal an, da ist wohl in der V4.5.2 alpha noch ein Fehler in der XML-Parser-Routine. Werde ich testen.

Ansonsten dachte ich es mir doch: Ich meinte die Korrektur zwei Beiträge über Deinem ersten Beitrag:
Kommentiere in der class.newsletter.groups.php (Bestandteil der Newsletter-Core-Dateien)
in der Klasse "RecipientGroupMemberCollection" (unten) in der Funktion "function RecipientGroupMemberCollection()"

die folgenden Zeilen aus:

Code:

Code: Alles auswählen

$this->_setJoinPartner ('RecipientGroupCollection');
$this->_setJoinPartner ('RecipientCollection');

D.h. ändere in:
Code:

Code: Alles auswählen

// $this->_setJoinPartner ('RecipientGroupCollection');
// $this->_setJoinPartner ('RecipientCollection');
Gruß
HerrB
Zuletzt geändert von HerrB am Mo 7. Mär 2005, 14:18, insgesamt 1-mal geändert.

yui
Beiträge: 140
Registriert: Di 17. Jun 2003, 17:55
Kontaktdaten:

Beitrag von yui » Mi 15. Dez 2004, 10:53

Hallo HerrB,

ich bin begeistert, es funktioniert! (warum hatte ich mich von vonyodatortenboxers Beitrag nicht angesprochen gefühlt? :? )

Du schreibst, Du hast noch etwas für ein NewsletterArchiv?

Have a nice and sunny day!
yui

yui
Beiträge: 140
Registriert: Di 17. Jun 2003, 17:55
Kontaktdaten:

Beitrag von yui » Mi 15. Dez 2004, 12:57

Was mir noch einfällt: Aus einer alten Liste importiere ich ca. 600 Adressen, die sind alle unconfirmed.

Diesen Leuten möchte ich eine Mail schreiben, in der sie das Abo bestätigen. Wie löse ich das am besten? MAIL_SUBSCRIBE gibts ja nicht.

yui

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

Beitrag von HerrB » Mi 15. Dez 2004, 15:44

Newsletter-Archiv: http://www.contenido.de/forum/viewtopic.php?t=6539

Uuum, versuche es doch mal mit dem folgenden Modul (aus dem Stehgreif, wenn möglich, erst mal nur mit einem Empfänger ausprobieren, siehe folgender Text!!!).

Du musst die Texte für txtMsgSubscribe usw. aus dem anderen Modul in dieses Modul übertragen. Außerdem die Absender-E-Mail-Adresse eintragen. Wenn die Seite mit dem Modul aufgerufen wird, wird die Confirm-Nachricht an alle Empfänger versendet, die noch nicht confirmed sind.

Zum Testen kannst Du Deinen eigenen Account manuell confirmen und

$recipients->select("idclient = '$client' AND idlang = '$lang' AND confirmed=0","", "name ASC");

in

$recipients->select("idclient = '$client' AND idlang = '$lang' AND confirmed=1","", "name ASC");

ändern (confirmed = 1, nur an bestätigte schicken) und damit das Ganze im Selbstversuch testen.

Ausgabe:

Code: Alles auswählen

<?php 
  cInclude("classes", "class.newsletter.recipients.php");
  $recipients = New RecipientCollection; 
  $recipients->select("idclient = '$client' AND idlang = '$lang' AND confirmed=0","", "name ASC");

  $from = "do-not-reply@domain.de"; /* Specify sender e-mail */
  $properties = new PropertyCollection; 
  $blackboxidcatart = $properties->getValue("clientsetting", $client, "Newsletter", "idcatart"); 

  while ($recipient = $recipients->next()) {
  $body = mi18n("txtMsgSubscribe")."\n".$cfgClient[$client]["path"]["htmlpath"].
"front_content.php?changelang=".$lang."&idcatart=". $blackboxidcatart."&confirm=".$recipient->get("hash")."\n\n"; 

        if (mail($recipient->get("email"), mi18n("txtMsgSubscribeHeader"), "$body", 'From: '.$from."\n"."X-Mailer: Contenido [PHP/" . phpversion()."]")) 
        { 
          echo $recipient->get("email") . ": OK"; 
        } else { 
          echo $recipient->get("email") . ": Error"; 
        } 
      } 
Bin heute nicht mehr im Hause... Viel Erfolg.

Gruß
HerrB
Zuletzt geändert von HerrB am So 30. Okt 2005, 13:49, insgesamt 2-mal geändert.

chriscross
Beiträge: 38
Registriert: Fr 31. Okt 2003, 15:25
Kontaktdaten:

ich komm nicht drauf...

Beitrag von chriscross » Fr 14. Jan 2005, 11:25

hallo leute

vielen dank herrb für deinen effort für die Newsletter-Überarbeitung für V4.5.x.

habe die die neue newsletter-erweiterung installiert gemäss deinem posting und der readme-datei und das meiste läuft eigentlich einwandfrei. nur habe ich einzig das problem das ich im frontend keine newsletter-empfänger an- oder abmelden kann.

problem beschrieb:
anmelde-formular auf website wird angezeigt und ich kann mich eintragen, beim absenden des formulars wird die blackbox auch sauber aufgerufen aber es erfolgt keinen eintrag in der db und kein versand des bestätigungsmail. es erfolgt auch keine fehlerausgabe, weder im error-log noch im blackbox-modul!
das problem scheint darin zu liegen dass ich im blackbox-modul die $action keinen wert hat und dadurch nichts verarbeiten kann. wenn ich die $action "von hand" setze, zb. mit subscribe, funktioniert die db-eintragung und die bestätigungsmail-versendung wunderbar.

meine frage nun:
wo werden die die formular-daten der $action übergeben? wo muss ich ansetzen um dieses Problem zu beheben.

Version:
4.5.2. alpha

errorlog:
keinen eintrag

bin für jeden tip dankbar

chriscross

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

Beitrag von HerrB » Mo 17. Jan 2005, 14:25

Das ist der Code des Subscription-Moduls (Output):

Code: Alles auswählen

<?php 
   $properties = new PropertyCollection; 
    
   echo '<form name="frmNewsletter" method="post" action="front_content.php?changelang='.$lang.'">',chr(10); 
   echo '  <table width="100%" border="0" cellspacing="0" cellpadding="0"> ',chr(10); 
   echo '    <tr>',chr(10); 
   echo '      <td>'.mi18n("htmlName").'</td>',chr(10); 
   echo '      <td><input name="emailname" type="text"></td>',chr(10); 
   echo '    </tr>',chr(10); 
   echo '    <tr>',chr(10); 
   echo '      <td>'.mi18n("htmlEMail").'</td>',chr(10); 
   echo '      <td><input name="email" type="text"><input type="hidden" name="idcatart" value="'.$properties->getValue("clientsetting", $client, "Newsletter", "idcatart").'"></td>',chr(10); 
   echo '    </tr>',chr(10); 
   echo '    <tr>',chr(10); 
   echo '      <td>&nbsp;</td>',chr(10); 
   echo '      <td><select name="action" id="action">',chr(10); 
   echo '            <option value="subscribe" selected>'.mi18n("txtSubscribe"). '</option>',chr(10); 
   echo '            <option value="delete">'.mi18n("txtUnsubscribe"). '</option>',chr(10); 
   echo '          </select></td>',chr(10); 
   echo '    </tr>',chr(10); 
   echo '    <tr>',chr(10); 
   echo '      <td>&nbsp;</td>',chr(10); 
   echo '      <td><input name="subscribe" type="submit" id="subscribe" value="'.mi18n("txtOK").'"></td>',chr(10); 
   echo '    </tr>',chr(10); 
   echo '  </table>',chr(10); 
   echo '</form>',chr(10); 
?> 
Die Action wird durch die Auswahlliste festgelegt:

Code: Alles auswählen

   echo '      <td><select name="action" id="action">',chr(10); 
   echo '            <option value="subscribe" selected>'.mi18n("txtSubscribe").'</option>',chr(10); 
   echo '            <option value="delete">'.mi18n("txtUnsubscribe").'</option>',chr(10); 
   echo '          </select></td>',chr(10); 
Gruß
HerrB
Zuletzt geändert von HerrB am So 30. Okt 2005, 13:51, insgesamt 2-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

chriscross
Beiträge: 38
Registriert: Fr 31. Okt 2003, 15:25
Kontaktdaten:

Beitrag von chriscross » Mo 17. Jan 2005, 14:36

ah ok! werde es gleich mal mit deinem subscribe-modul versuchen.

mit bestem Dank!

chriscross

Gesperrt