Nachricht an alle Mitglieder aus dem Frontend heraus
Hallo Community,
ich hätte gerne die Möglichkeit das die Mitglieder Nachrichten an alle anderen Mitglieder versenden können.
Also z.B. darüber das man einen neuen Newsletter im Frontend erstellen könnte. Gibt es diese Möglichkeit?
Oder über eine andere Funktion, wie z.B. mit dem EFG. Geht das?
Auf jeden Fall eine Lösung die ohne allzuviel selber programmieren auskommt und unter der Voraussetzung das die Nachricht im Frontend geschrieben werden kann.
Ich freue mich über eure Tipps!
Gruß
globalcow
Nähere Erläuterungen zur Lösung
Hi Dusi,
ich versuche mal die Lösung knapp zusammen zu fassen.
In der Datei EfgCallbacks.php im Ordner des Efg-Moduls kannst du ja eigene Funktionen definieren, die aufgerufen werden wenn ein Efg Formular abgesendet wird. Also der oben genannte processEfgFormData Hook.
Ich habe dort die folgende Funktion eingefügt:
PHP-Code:
public function empfaengerSetzen($arrSubmitted, $arrFiles, $intOldId, &$arrForm)
{
// Einschraenkung auf das Formular mit ID 7 (als Beispiel)
if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_7')
{
// Hole Mailadressen einer bestimmten Gruppe
// Dazu muss in deinem Formular ein Select-Menü 'group' existieren.
// Die Werte des Menüs sind die IDs der verschiedenen Mitgliedergruppen.
$member = $this->Database->prepare("SELECT email FROM tl_member WHERE groups LIKE ?")->execute('%"'.$arrSubmitted['group'].'"%');
while($member->next())
{
$strEmpfaenger = $strEmpfaenger . $member->email . ", ";
}
$arrForm['formattedMailRecipient'] = $strEmpfaenger;
$arrSubmitted['empfaenger'] = $arrSubmitted['empfaenger'] . ", " . $strEmpfaenger;
}
return $arrSubmitted;
}
Das Formular selber wird per E-Mail versendet (EFG). Der dort angegebene Empfänger wird mit Hilfe des Hooks überschrieben.
Das hat soweit ganz gut funktioniert. Ich bin mir nicht mehr ganz sicher ob die Anzahl der Empfänger Probleme machten. Ich benutze selbst die Funktion nicht mehr da wir auf Mailinglists umgestiegen sind. In Contao wurde aber auch das Mailmodul aktualisiert soweit ich weiß. Probiere es einfach mal!
Ich hoffe damit helfe ich dir erstmal weiter.
Viele Grüße
globalcow
Versand an Abonnenten eines Newsletters funktioniert nicht!
Hallo!
Ich habe vor, dass in der Webseite, die ich gerade erstelle (www.mv-erla.at), die Mitglieder des geschützten Bereichs E-Mails über ein Formular (mit EFG) an die Abonnenten der verschiedenen Newsletter schicken können.
Dies realisiere ich mit der Datei "EfgCallbacks.php", die ich unter "system/modules/efg" eingefügt habe und folgenden Code enthält:
PHP-Code:
// $arrSubmitted enthalt die POST-Werte
// $arrForm enthaelt die 'Formular-Konfiguration'
class EfgCallbacks extends Backend
{
public function exampleMailRecipient($arrSubmitted, $arrFiles, $intOldId, &$arrForm)
{
// Einschraenkung auf das Formular
if ($arrSubmitted['FORM_SUBMIT'] == 'auto_formmailsend')
{
// überschreiben des Wertes von 'Betreff' mit dem Wert aus dem Fomularfeld ['subject'
$arrForm['formattedMailSubject'] = $arrSubmitted['subject'];
// überschreiben des Wertes von 'Empfänger-Adresse' mit dem Wert aus dem Fomularfeld 'recipient'
//$arrForm['formattedMailRecipient'] = $arrSubmitted['recipient'];
// Hole Mailadressen der Abonnenten eines bestimmten Newsletter-Verteilers
// Die Werte des Select-Menüs 'grouprecipient'sind die P-IDs der verschiedenen Newsletter.
$member = $this->Database->prepare('SELECT email FROM tl_newsletter_recipients WHERE pid LIKE ?')->execute('%"'.$arrSubmitted['grouprecipient']);
while($member->next())
{
$strEmpfaenger = $strEmpfaenger . $member->email . ", ";
}
$arrForm['formattedMailRecipient'] = $strEmpfaenger;
$arrSubmitted['recipient'] = $arrSubmitted['recipient'] . ", " . $strEmpfaenger;
}
return $arrSubmitted;
}
}
in der "dcaconfig.php" hab ich folgende Zeile hinzugefügt:
PHP-Code:
$GLOBALS['TL_HOOKS']['processEfgFormData']['callback_02'] = array('EfgCallbacks', 'exampleMailRecipient');
Nach dem Drücken des Absenden-Buttons wird ganz normal weitergeleitet.
Die Mail kommt jedoch nicht beim Empfänger an bzw. wird gar nicht verschickt?
Hat wer eine Idee, an was dies liegen könnte?
Wenn ich einen Empfänger über ein Formularfeld eingebe, siehe ausgeklammerter Bereich
PHP-Code:
// überschreiben des Wertes von 'Empfänger-Adresse' mit dem Wert aus einem Formularfeld
$arrForm['formattedMailRecipient'] = $arrSubmitted['recipient'];
Funktioniert es einwandfrei. Die Mail kommt beim Empfänger an.
Mit dem Auslesen der Abonnenten des jeweiligen Newsletter-Verteilers (Parent-Id des Newletters wird mit der Select-Box 'grouprecipient' übergeben, funktioniert es nicht mehr, sie oben beschriebenes Problem.
Ich schätze, es könnte an diesem Programmteil liegen, komme aber nicht dahinter:
PHP-Code:
// Hole Mailadressen der Abonnenten eines bestimmten Newsletter-Verteilers
// Die Werte des Select-Menüs 'grouprecipient'sind die P-IDs der verschiedenen Newsletter.
$member = $this->Database->prepare('SELECT email FROM tl_newsletter_recipients WHERE pid LIKE ?')->execute('%"'.$arrSubmitted['grouprecipient']);
while($member->next())
{
$strEmpfaenger = $strEmpfaenger . $member->email . ", ";
}
$arrForm['formattedMailRecipient'] = $strEmpfaenger;
$arrSubmitted['recipient'] = $arrSubmitted['recipient'] . ", " . $strEmpfaenger;
Vielen, vielen Dank
martinmv
Vielen Dank. Funktioniert jetzt einwandfrei!
Zitat:
Zitat von
folkfreund
Bist du sicher, dass das Formular per Konfiguration überhaupt an eine Empfängerliste versenden kann?
Das könntest du versuchen, indem du mal in deinem Formularfeld 'recipient' direkt 2 Mailadressen mit Komma getrennt eingibst.
Dies funktioniert einwandfrei, habe ich gerade ausprobiert.
Zitat:
Zitat von
globalcow
- Wie ich schon in einem Post weiter oben geschrieben habe wundere ich mich auch bei dir über die Zeile
if ($arrSubmitted['FORM_SUBMIT'] == 'auto_formmailsend')
Müsste da nicht sowas wie auto_form_ID stehen und die ID ist die deines Formulars? Da bin ich mir nach wie vor aber nicht sicher.
Ich habe dem Formular unter den Formular-Einstellungen eine Formular-ID gegeben: "formmailsend"
Dadurch lautet bei mir diese Zeile so.
Zitat:
Zitat von
globalcow
- Ich glaube hier ist ein Fehler. Richtig ist meiner Meinung nach
PHP-Code:
->execute('%"'.$arrSubmitted['grouprecipient'].'"%');
Vielleicht hilft das ja?
Stimmt, hatte das letzte .'"%' vergessen!
Jetzt funktioniert der Sendevorgang einwandfrei! Vielen Dank!!
Zitat:
Zitat von
folkfreund
Noch ein Nachtrag:
Wenn es sich bei den Empfängern um die Abonenten eines Newsletters handelt, dann wird dieser Punkt sicher wieder aktuell!
folkfreund
Wieso offen versendet? Bei den gesendeten E-mails steht jeweils nur ihre E-Mail Adresse im Empfänger-Feld, sonst nichts.
Außerdem sind die Mail-Adressen der Mitglieder der Newsletter sowieso allen Mitgliedern bekannt, drum wäre das auch nicht so tragisch.