[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Email-Templates der xform mit php - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
tombaer
Beiträge: 154
Registriert: 30. Mär 2008, 00:41
Kontaktdaten: ICQ

Email-Templates der xform mit php

13. Mär 2013, 11:22

Hallo,

ich nutze die Email-Templates von xform zum Versenden von Formulareingaben. Nun habe ich im Formular z.B. eine Checkbox für die Zustimmung zu Bedingungen. In der Email soll aber nicht stehen Bedingung 0 oder 1, sondern "Sie haben zugestimmt" oder "Sie haben nicht zugestimmt". Sowas ist ja mit php problemlos machbar, indem ich den Wert von Bedingung abfrage. ABER: Im Email-Template lässt sich kein PHP verwenden. Wie kann ich das lösen?

Danke für alle Tipps,

Tom
------------------------------------------------
rotzek - Werbung, Hosting und IT
www.rotzek.de
------------------------------------------------

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: Email-Templates der xform mit php

17. Mär 2013, 21:04

Hi Tom,

einen Wert erstellen, der nur in der E-Mail auftaucht ist nicht möglich, ohne einen
Umbaue der checkbox Klasse.

Ansonsten kannst Du aber auch direkt die checkbox Werte ändern

checkbox|label|Bezeichnung|Values(0,1)|default clicked (0/1)|[no_db]

checkbox|label|Bezeichnung|Sie haben nicht zugestimmt,Sie haben zugestimmt|0|

Dann taucht das in der Email so auf, wird aber auch so gespeichert, sofern du die
Daten in der Datenbank speicherst.

lg

Jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

tombaer
Beiträge: 154
Registriert: 30. Mär 2008, 00:41
Kontaktdaten: ICQ

Re: Email-Templates der xform mit php

17. Mär 2013, 22:07

Hi Jan,

danke für die Antwort - das ist aber schade... ich habe öfters den Fall, dass ich verschiedene Werte abfragen möchte und den Inhalt der Email dementsprechend gestalten will. Ist es nicht irgendwie möglich in den email-templates auch php zu verwenden? oer ist das für kommende Versionen vorgesehen?

LG

Tom
------------------------------------------------
rotzek - Werbung, Hosting und IT
www.rotzek.de
------------------------------------------------

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: Email-Templates der xform mit php

18. Mär 2013, 12:32

Hi,

daran habe ich noch gar nicht gedacht .. eventuell ist das wirklich sinnvoll mit php code im email template.. Habs mal in die Liste der ToDos aufgenommen.

lg

Jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

Re: Email-Templates der xform mit php

23. Nov 2014, 19:02

Hallo,

gibts hier denn evtl schon ein Update?
Beeinflussbare Mailtemplates fände ich auch sehr nützlich.
Viele Grüße
cukabeka

Benutzeravatar
alexplus
Beiträge: 212
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Email-Templates der xform mit php

19. Feb 2016, 18:53

An dieser Stelle hatte ich eine (noch) ausführlichere Dokumentation meines Lösungswegs notiert, der leider beim Absenden verloren ging, weil mich das Redaxo-Forum zwischenzeitlich ausgeloggt hat. [ externes Bild ] Deshalb in aller Kürze:

xform + PHP + E-Mail-Templates am Beispiel eines Bestellformulars

1. Im xForm Table-Manager alle Felder und Validierungsfelder anlegen
[ externes Bild ]

2. E-Mail-Template anlegen und Formular-Code (E-Mail) aus dem Table-Manager kopieren

[ externes Bild ]

[ externes Bild ]

3. Modul anlegen und Formular-Code (PHP) aus dem Table-Manager kopieren

[ externes Bild ]

[ externes Bild ]

4. Action "db2email" aus Modul-Code löschen und sich stattdessen an nachfolgendem Modul orientieren.
  1. Actions "createdb" (hier obsolet) und "db" sorgen dafür, dass die Daten zunächst nur in der Datenbank gespeichert werden.
  2. Angaben aus dem E-Mail-Template werden aus der Datenbank geholt.
  3. E-Mail-Platzhalter werden manuell ersetzt. Die Felder ###production### ###message### ###datestamp### werden wie beabsichtigt vor dem Absenden in PHP verarbeitet.
  4. rex_mailer wird mit den Parametern gefüttert und die E-Mail abgesendet
  5. Je nach Erfolg des Mail-Versands wird eine Meldung ausgegeben. In meinem Fall kann die Meldung im Modul vom Kunden bearbeitet werden, man könnte sie jedoch auch hardcodiert in $msg eintragen.
Modul-Eingabe (mform-Addon benötigt)

Code: Alles auswählen

<?php
$MForm = new MForm();
$MForm->addTextAreaField(1,array('label'=>'Text bei Erfolg','class'=>"rex-markitup"));
$MForm->addTextAreaField(2,array('label'=>'Text bei nicht erfolgreichem Mail-Versand','class'=>"rex-markitup"));
echo $MForm->show();
?>
Modul-Ausgabe
Die einzelnen Punkte aus 4. werden im Modul-Ausgabe-Code kommentiert, was aber hier im Forum nicht wirklich lesbar ist. Deshalb besser hier klicken: http://pastebin.com/19F1aLwP

Code: Alles auswählen

<?php

// aus xForm generierter Formular-Code
$xform = new rex_xform();
$xform->setObjectparams('form_skin', 'default');
$xform->setObjectparams('form_showformafterupdate', 0);
$xform->setObjectparams('real_field_names', true);

$xform->setValueField('fieldset', array("fieldset_product","Produkt"));
$xform->setValueField('select_sql', array("production","Produkt","SELECT id, name from rex_xf_productions ORDER BY name","REQUEST","","0","","0","1"));
$xform->setValueField('checkbox', array("order_type","Ansichtskopie","nein,ja","0"));
$xform->setValueField('radio', array("customer_type","Lizenz","Privatperson,Schule,Medienzentrum,Kreis-Online-Lizenz","","Privatperson"));
$xform->setValueField('fieldset', array("fieldset_customer","Kunden-Daten"));
$xform->setValueField('text', array("name","Name"));
$xform->setValueField('text', array("phone","Telefon"));
$xform->setValueField('text', array("mail","E-Mail-Adresse"));
$xform->setValueField('textarea', array("message","Ihre Nachricht"));
$xform->setValueField('text', array("street","Straße / Hausnummer"));
$xform->setValueField('text', array("zip","PLZ","","","zip"));
$xform->setValueField('text', array("city","Ort"));
$xform->setValueField('fieldset', array("fieldset_order"));
$xform->setValueField('select', array("channel","Wie wurden Sie auf uns aufmerksam?","Werbung,Google,Newsletter,Medienzentren,Empfehlung,Keine Angabe=0","","0","0","1"));
$xform->setValueField('checkbox', array("agb","Ich habe die AGB gelesen und akzeptiert","nein,ja","0"));
$xform->setValueField('checkbox', array("newsletter","Newsletter","nein,ja","1"));
$xform->setValueField('datestamp', array("datestamp","mysql","","1"));

$xform->setValidateField('empty', array("name","Bitte geben Sie im Feld \"Name\" einen Ansprechpartner an."));
$xform->setValidateField('empty', array("mail","Bitte geben Sie im Feld \"E-Mail\" eine E-Mail-Adresse an."));
$xform->setValidateField('email', array("mail","Bitte geben Sie im Feld \"E-Mail\" eine korrekte E-Mail-Adresse an und prüfen Sie sie auf Tippfehler."));

// Angepasste Parameter

$xform->setRedaxoVars($REX['ARTICLE_ID'], $REX['CUR_CLANG']); 
$xform->setActionField('createdb', array('rex_xf_order'));
$xform->setActionField('db', array('rex_xf_order'));
$xform->setObjectparams("form_action", seo42::getFullUrl($REX['ARTICLE_ID'], '', 'submit=1&production='. rex_request("production", "int")));

// Wenn das Formular abgesendet wurde
if (($form = $xform->getForm()) == '') {

	$form_values = $xform->objparams['value_pool']['email'];
	
	// E-Mail-Template aus xForm-Tabelle holen
	$sql = rex_sql::factory();
	$sql->debugsql = 0;
	$email_template = $sql->getArray('SELECT * FROM rex_xform_email_template WHERE name = "order" LIMIT 1');
	$email_template = $email_template[0];
	
	$productions = $sql->getArray('SELECT * FROM rex_xf_productions WHERE id = '.(int) $form_values['production'].'');

	// Platzhalter im Template befüllen
	$placeholders['###production###'] 	 = $productions[0]['name'];
	$placeholders['###order_type###'] 	 = $form_values['order_type'];
	$placeholders['###customer_type###'] = $form_values['customer_type'];
	
	$placeholders['###name###'] = $form_values['name'];
	$placeholders['###phone###'] = $form_values['phone'];
	$placeholders['###mail###'] = $form_values['mail'];
	$placeholders['###message###'] = rex_a79_textile(str_replace('<br />','',htmlspecialchars_decode($form_values['message'],ENT_QUOTES)));
	
	$placeholders['###street###'] = $form_values['street'];
	$placeholders['###zip###'] = $form_values['zip'];
	$placeholders['###city###'] = $form_values['city'];
	
	$placeholders['###channel###'] = $form_values['channel'];
	$placeholders['###agb###'] = $form_values['agb'];
	$placeholders['###newsletter###'] = $form_values['newsletter'];
	$placeholders['###datestamp###'] = date("d.m.Y - H:i", strtotime($form_values['datestamp']));
	
	$search = array_keys($placeholders);
	$replace = array_values($placeholders);
	
	$email_template['body_html'] = str_replace($search, $replace, $email_template['body_html']);


	// rex_mailer für den Mailversand vorbereiten
	$mail = new rex_mailer();

	if($formData['email']) {
		$mail->AddAddress($form_values['email'], $form_values['name']);
	}
	$mail->AddAddress($email_template['mail_from']);
	$mail->WordWrap = 80;
	$mail->From = $email_template['mail_from'];
	$mail->FromName = $email_template['mail_from_name'];
	$mail->Sender =  $email_template['mail_from'];
	$mail->Subject =  $email_template['subject'];
	$mail->Body = $email_template['body_html'];
	$mail->AltBody = strip_tags($email_template['body_html']);

	// Mail senden und bei Erfolg eine Nachricht im Browser ausgeben.

	if ($mail->Send()) {
		// Wer bei der Modul-Eingabe kein MarkItUp verwendet, kann hier auch einen hardcodierten Text in $msg einsetzen. 
		$msg = rex_a79_textile(str_replace('<br />','',htmlspecialchars_decode('REX_VALUE[1]',ENT_QUOTES))); 
	} else {
		// s.o.
		$msg = rex_a79_textile(str_replace('<br />','',htmlspecialchars_decode('REX_VALUE[2]',ENT_QUOTES)));
	}
	
	echo '<div id="xform_info">' . $msg . '</div>';

} else {
	// Wenn ($form = $xform->getForm()) == '') false ist, dann wurde kein Formular abgesendet. Stattdessen soll das Formular ausgegeben werden.
	echo $form;
}

?>
Hinweis: Das Modul berücksichtigt nicht das E-Mail-Template-Feld "Attachments" sowie "BODY" (ohne HTML).

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

Re: Email-Templates der xform mit php

19. Feb 2016, 19:10

Sehr cool, danke dir für deine Mühe und das teilen deines Ansatzes. :D Wäre vielleicht was fürs Wiki, oder? Und würde befürchten, dass dein free-IMG-hoster evtl mal offline geht, vielleicht kannst du ja auch die Bilder nochmal als Dateianhänge hier ins Forum laden?
Viele Grüße
cukabeka

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Email-Templates der xform mit php

19. Feb 2016, 19:38

Code: Alles auswählen

$tplvars = [
    'xxx' => $form_values['xxx'],
    'yyy' => $form_values['yyy'],
    'zzz' => $form_values['zzz']
];

$tpl = rex_xform_emailtemplate::getTemplate('name_des_email_templates');
$tpl = rex_xform_emailtemplate::replaceVars($tpl, $tplvars);
$tpl['mail_to'] = $values['email'];
rex_xform_emailtemplate::sendMail($tpl);
 
:)

Benutzeravatar
alexplus
Beiträge: 212
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Email-Templates der xform mit php

19. Feb 2016, 22:37

Ingo hat geschrieben:

Code: Alles auswählen

$tplvars = [
    'xxx' => $form_values['xxx'],
    'yyy' => $form_values['yyy'],
    'zzz' => $form_values['zzz']
];

$tpl = rex_xform_emailtemplate::getTemplate('name_des_email_templates');
$tpl = rex_xform_emailtemplate::replaceVars($tpl, $tplvars);
$tpl['mail_to'] = $values['email'];
rex_xform_emailtemplate::sendMail($tpl);
  
:)
Hey Ingo,

puh, die Halbwertszeit meines Beitrags ist natürlich ganz schön bitter. Trotzdem vielen Dank, dass du hier einen besseren Ansatz dokumentiert hast.

Studierst du dazu immer den Addon-Quelltext oder woher erfährst du davon? Denn ich bin da bisher nicht im Forum oder im Github-Wiki oder auf der Redaxo-Seite oder im Redaxo-Wiki oder oder oder fündig geworden. Denn ich denke viele hier würden es gerne besser machen, wenn sie wüssten, wie und manchmal bleiben Beiträge hier nicht nur Tage liegen, sondern Jahre - was irgendwie schade ist.

Vielleicht hast du mir ja auch einen Tipp hierfür: http://www.redaxo.org/de/forum/addons-f ... 20942.html

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: Email-Templates der xform mit php

20. Feb 2016, 00:15

Quelltext stöbern und einige Jahre kreatives Arbeiten mit xform :mrgreen:

Dein anderes Problem: class.xform.be_manager_relation.inc.php#L222-L234

Damit das so funktioniert wie du dir das vorstellst (was intuitiv wäre), müssten bei jedem Speichern alle bisherigen Einträge des Multiselects in der Relation Tabelle gelöscht und dann alle aktivierten Optionen neu eingefügt werden. Es sieht aber so aus, als ob nur neu aktivierte Optionen eingefügt und deaktivierte Optionen gelöscht werden - bestehende Optionen bleiben in der Relation Tabelle einfach da, wo sie sind.

Du musst für eine Neusortierung erst alle Optionen des Multiselects deaktivieren und übernehmen klicken (damit alle Einträge in der Relation Tabelle gelöscht weren). Wenn du dann erneut auswählst und sortierst, wird die neue Sortierung übernommen.

Alles ohne Gewähr, habs selbst noch nie benutzt sondern nur gerade in die be_manager_relation reingeguckt. Wenns aber wie beschrieben funktioniert, mach ein Issue bei GH auf - das sollte relativ einfach zu fixen sein.

Benutzeravatar
alexplus
Beiträge: 212
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Email-Templates der xform mit php

22. Feb 2016, 11:47

Danke, Ingo!

Funktioniert genau so wie beschrieben und ich konnte es gleich selbst anpassen.
https://github.com/yakamara/redaxo_xform/pull/339

Zurück zu „Allgemeines [R4]“