function my_form_title_recipient_de( &$postvar, &$form, &$mail ) { .... }
function my_form_title_copy_to_de( &$postvar, &$form, &$mail ) { .... }
\\
----
----
Docu: -- \\
Forum: --
**Autor:** [[http://planmatrix.de|K.Heermann]] //(flip-flop) (22.01.10)// \\
**CMS-Version:** >= V1.4.1 r282 \\
**Version:** V1.0 //22.01.10// \\
**Bedingung:** -> [[http://www.phpwcms-docu.de/confincphp_de.phtml|/config/phpwcms/conf.inc.php]] \\
* $phpwcms['allow_ext_init'] = 1;
----
----
\\
===== Beispielaufgabe: =====
Den E-Mails an den User (To) und an den Seitenbetreiber (CC) soll eine korrekte Anrede mitgegeben werden, die durch die Anredeauswahl [Frau] - [Herr] - [Firma] gesteuert wird:
[Frau] "Sehr geehrte Frau ...."
[Herr] "Sehr geehrter Herr ...."
[Firma] "Sehr geehrte Damen und Herren"
Darüber hinaus soll die abgesendete E-Mail nach dem "Absenden" //(submit)// noch einmal angezeigt werden.
- BE: In den Vorlagen für To //(Empfänger - Vorlage)// und CC //(Kopie an - Vorlage)// wird ein Platzhalter [%TITLE%] für die Anrede eingesetzt.
- Script: Ersetzen des Platzhalters [%TITLE%] in beiden E-Mailtexten durch die entsprechende Anrede
- FE: Ausgabe des E-Mailtextes To //(Empfänger - Vorlage)// auf der Folgeseite nach dem Senden.
\\
===== Frontend-Eingabe =====
Das einfache Formular
{{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:php_function_include_fe01_de_1.gif|}}
\\
===== Frontend-Ausgabe =====
Die E-Mail wird korrigiert ausgegeben und ausgeliefert.
{{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:php_function_include_fe02_de_1.gif|}}
~~UP~~
===== Backend =====
Das einfache Formular im Backend.
**Besonderheiten:**
Das Feld **"bei Erfolg:"** muss als **HTML** gekennzeichnet werden, da dieses Feld später für die Anzeige der versendeten E-Mail verwendet wird. //(Wird durch das Script befüllt)//.
Bitte auf den Platzhalter ##[%TITLE%]## in den Vorlagen und den Einträgen \\
- **my_form_title_recipient_de** unter **"Vorlage"** und \\
- **my_form_title_copy_to_de** unter **"Kopie an - Vorlage"** \\
in **"PHP-Funktion"** achten.
\\
{{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:php_function_include_be01_de_1.gif|}}
~~UP~~
===== Backend-Code =====
==== Empfänger-Vorlage: / Kopie an - Vorlage: ====
... sind hier zufällig identisch.
Name: {title} {name}
E-Mail: {email}
Nachricht:
------------------------------
{notice}
------------------------------
[%TITLE%],
wir bedanken uns für das Interesse und werden uns in Kürze bei Ihnen melden.
Mit freundlichem Gruß
Sir-Oblong-Fitz-Oblong
\\
Die Vorlagen können auch als HTML generiert werden. Die Ausgabe nach dem Senden wird durch das Script entsprechend angepasst und dargestellt.
\\
==== Vorlage: ====
[B]{ERROR:title}[/B] [B]{LABEL:title}[/B][BR]{title}[BR][BR]
[B]{ERROR:name}[/B] [B]{LABEL:name}[/B][BR]{name}[BR][BR]
[B]{ERROR:email}[/B] [B]{LABEL:email}[/B][BR]{email}[BR][BR]
[B]{ERROR:notice}[/B] [B]{LABEL:notice}[/B][BR]{notice}[BR][BR]
[B]{ERROR:nospam}[/B] [B]{LABEL:nospam}[/B][BR]{nospam}[BR][BR]
{submitIt}
~~UP~~
===== Exkurs: Funktionen/Variablen =====
Es wird zuerst die Funktion für die **"Empfänger - Vorlage"** //("my_form_title_recipient_de")// und in einem zweiten Aufruf die Funktion für **"Kopie an - Vorlage"** //("my_form_title_copy_to_de")// abgearbeitet. Auf die Reihenfolge haben wir keinen Einfluss.
Mit einem Funktionsaufruf werden autom. die drei Arrays **$postvar, $form** und **$mail** übergeben //(Siehe unten)//.
**Beispiel:** \\
Der Funktionsaufruf aus dem Formular mit **"my_incredible_function"** erwartet die Funktion
function my_incredible_function( &$postvar, &$form, &$mail ) { .... }
in einer Datei im Verzeichnis **template/inc_script/frontend_init/ **
Alle Parameter können ausgelesen und verarbeitet werden. Interessant sind i.d.R. die beiden Werte aus **$form['template']** und **$form['template_copy']**. \\
In diesen beiden Variablen finden wir den generierten E-Mailtext aus **"Empfänger - Vorlage"** //("my_form_title_recipient_de")// und **"Kopie an - Vorlage"** //("my_form_title_copy_to_de")//. \\
Diese Texte können nun mit Hilfe von PHP ausgelesen, manipuliert und zurückgeschrieben werden. \\
Nachdem die Funktionen verlassen wurden werden die E-Mails an die eingetragenen Adressen abgesetzt.
===== postvar ===========================
';
dumpVar($postvar);
echo '
===== form ==============================
';
dumpVar($form);
echo '
===== mail ==============================
';
// Sicherheitsrisiko wenn vergessen wird das Script nach Beendigung der Arbeiten zu entfernen.
// Ist für die meisten Anwendungen auch uninteressant.
// dumpVar($mail);
echo '
===== mail ende =========================
';
} // ==== End function
/*
===============================================================================
===============================================================================
*/
?>
\\
----
\\
==== Inhalt: $postvar ====
Inhalt des Arrays $postvar mit
dumpVar($postvar);
In $postvar sind alle angelegten Felder des Formulars mit dem aktuellen Inhalt hinterlegt. Hierzu zählen auch die Felder, die in den Vorlagen nicht eingesetzt werden. Z.B. ein verstecktes //(hidden)// Feld um einen Wert/Status vom ersten Aufruf des Scriptes "my_form_title_recipient_de" zum zweiten Aufruf "my_form_title_copy_to_de" zu übergeben.
Array
(
[title] => Herr
[name] => Franz Mustermann
[email] => f-mustermann@example.com
[notice] => Bitte geben Sie hier Ihre Nachricht ein
[nospam] => 12
)
\\
==== Inhalt: $form ====
Inhalt des Arrays $form mit
dumpVar($form);
Array
(
[subject] => Vom Kontaktformular example.com
[startup] => [B]E-Mail versenden![/B][BR]
[startup_html] => 0
[class] =>
[error_class] => error
[label_wrap] => Array
(
[0] =>
[1] =>
)
[cform_reqmark] => *
[cc] => Array
(
[0] => formular@example.com
)
[targettype] => emailfield_email
[target] => Array
(
[0] => f-mustermann@example.com
)
[subjectselect] =>
[sendertype] => system
[sender] => kontakt@example.com
[sendernametype] => custom
[sendername] =>
[verifyemail] =>
[labelpos] => 2
[sendcopy] => 1
[copyto] => Franz Mustermann
[formtracking_off] => 1
[checktofrom] => 0
[onsuccess_redirect] => 2
[onerror_redirect] => 2
[onsuccess] => [B]Die E-Mail wurde erfolgreich gesendet![/B][BR]Name: Herr Franz Mustermann
E-Mail: f-mustermann@example.com
Nachricht:
------------------------------
Bitte geben Sie hier Ihre Nachricht ein
------------------------------
Sehr geehrter Herr Franz Mustermann,
wir bedanken uns für das Interesse und werden uns in Kürze bei Ihnen melden.
Mit freundlichem Gruß
Sir-Oblong-Fitz-Oblong
[onerror] => [B]Bitte achten Sie auf den unten angezeigten Fehler![/B]
[template_format] => 0
[template] => Name: Herr Franz Mustermann
E-Mail: f-mustermann@example.com
Nachricht:
------------------------------
Bitte geben Sie hier Ihre Nachricht ein
------------------------------
Sehr geehrter Herr Franz Mustermann,
wir bedanken uns für das Interesse und werden uns in Kürze bei Ihnen melden.
Mit freundlichem Gruß
Sir-Oblong-Fitz-Oblong
[template_format_copy] => 0
[template_copy] => Name: Herr Franz Mustermann
E-Mail: f-mustermann@example.com
Nachricht:
------------------------------
Bitte geben Sie hier Ihre Nachricht ein
------------------------------
Sehr geehrter Herr Franz Mustermann,
wir bedanken uns für das Interesse und werden uns in Kürze bei Ihnen melden.
Mit freundlichem Gruß
Sir-Oblong-Fitz-Oblong
[function_to] => my_form_title_recipient_de
[function_cc] => my_form_title_copy_to_de
[template_equal] => 0
[customform] =>
[B]{ERROR:title}[/B] [B]{LABEL:title}[/B][BR]{title}[BR][BR]
[B]{ERROR:name}[/B] [B]{LABEL:name}[/B][BR]{name}[BR][BR]
[B]{ERROR:email}[/B] [B]{LABEL:email}[/B][BR]{email}[BR][BR]
[B]{ERROR:notice}[/B] [B]{LABEL:notice}[/B][BR]{notice}[BR][BR]
[B]{ERROR:nospam}[/B] [B]{LABEL:nospam}[/B][BR]{nospam}[BR][BR]
{submitIt}
[savedb] => 1
[saveprofile] => 0
[fields] => Array
(
[1] => Array
(
[type] => select
[name] => title
[label] => Anrede
[required] => 0
[value] => Frau
Herr
Firma
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] =>
[max] =>
)
[2] => Array
(
[type] => text
[name] => name
[label] => Name
[required] => 1
[value] => Franz Mustermann
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] => 48
[max] =>
)
[3] => Array
(
[type] => email
[name] => email
[label] => eMail
[required] => 1
[value] => f-mustermann@example.com
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] => 48
[max] =>
)
[4] => Array
(
[type] => textarea
[name] => notice
[label] => Nachricht
[required] => 0
[value] => Bitte geben Sie hier Ihre Nachricht ein
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] => 37
[max] => 3
)
[5] => Array
(
[type] => mathspam
[name] => nospam
[label] => Spamschutz
[required] => 1
[value] => Array
(
[+] => Summieren
[-] => Subtrahieren
[*] => Multiplizieren
[:] => Dividieren
[calc] => Berechnung:
)
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] => 10
[max] =>
)
[6] => Array
(
[type] => submit
[name] => submitIt
[label] => Senden
[required] => 0
[value] => Senden
[error] => Fehler:-
[style] =>
[class] =>
[profile] =>
[size] =>
[max] =>
)
)
[is_enctype] =>
[regx_pattern] => Array
(
[A-Z] => /^[A-Z]+$/
[a-Z] => /^[a-zA-Z]+$/
[a-z] => /^[a-z]+$/
[0-9] => /^[0-9]+$/
[PHONE] => /^[+]?([0-9]*[\.\s\-\(\)\/]|[0-9]+){3,24}$/
[INT] => /^[0-9\-\+]+$/
[WORD] => /^[\w]+$/
[LETTER+SPACE] => /^[a-z _\-\:]+$/i
)
[is_html_entity] =>
[fe_current_url] => http://example.com/index.php?category04_01_05
)
\\
=== $form['template'] und $form['template_copy'] ===
Interessant sind hier die beiden Bereiche **$form['template']** und **$form['template_copy']** die den jeweils fertigen E-Mailtext beinhalten.
Beider Texte sind hier der Einfachheit halber identisch, könnten allerdings auch unterschiedlich sein.
* **$form['template']** => Text "To" also aus **"Empfänger - Vorlage"**
* **$form['template_copy']** => Text "CC" also aus **"Kopie an - Vorlage"**
\\
';
$email_text .= $form['template'];
$email_text .= '';
// More link // Weiter link
$email_text .= '';
$email_text .= '';
$email_text .=' >>Weiter >>';
$email_text .= '';
// Insert e-mail text and if non HTML: convert LF to
// Einsetzen des E-Mailtextes und wenn kein HTML LF nach
$form['onsuccess'] .= ($form['template_format'] == 1) ? $email_text : nl2br($email_text);
} // ==== End function
// Function using in copy to template // Funktion fuer das "Kopie an" Template
function my_form_title_copy_to_de( &$postvar, &$form, &$mail ) {
// Die richtige Anrede suchen
// Set up the right title
// ---------------------------------------------------------------
$result = '';
switch (trim($postvar['title'])) {
case 'Frau':
$result = 'Sehr geehrte Frau '.trim($postvar['name']);
break;
case 'Herr':
$result = 'Sehr geehrter Herr '.trim($postvar['name']);
break;
case 'Firma':
$result = 'Sehr geehrte Damen und Herren';
break;
default:
$result = 'Sehr geehrte Damen und Herren';
}
// Replace the form placeholder [%TITLE%] in both e-mail texts by the right title
// Ersetzen des Formularplatzhalters [%TITLE%] in beiden E-Mailtexten durch die richtige Anrede
// ---------------------------------------------------------------
$form['template_copy'] = str_replace('[%TITLE%]',$result, $form['template_copy']); // copy to: / Kopie an:
} // ==== End function
?>
\\
===== Ausgabe des E-Mailtextes (To) auf der Folgeseite =====
Das BE Eingabefeld "**Bei Erfolg:**" wird im Script mit dem E-Mailtext aus To //(Empfänger - Vorlage)// der **Variablen $form['template']** gefüllt. Dazu schreiben wir einfach den Text, eingebettet in ein wenig Formatierung, aus **$form['template']** in die **Variable $form['onsuccess']**. \\
Darüberhinaus wird noch ein Link //(weiter)// zur aktuelle Seite //(Formular)// generiert.
\\
\\
====== Nutzen der i18n @@Replacementsags@@ in Emails, für mehrsprachige Seiten ======
Das oben beschriebene Verfahren kann sehr einfach dazu eingesetzt werden, um E-Mail Text mit Hilfe der i18n Funktion [[deutsch/ersetzer_rts/integrierte-tags/sprach-tags/i18n]] von phpwcms zu übersetzten.
Angenommen wir schreiben folgende E-Mail Vorlage:
@@Firma@@: {firma} \\
@@Betreff@@: {subject}
und möchten @@Firma@@ für englischsprachige E-Mail Empfänger //(z.B. für die E-Mail Kopie)// als "Company" bzw. @@Betreff@@ als "Subject" in der E-Mail stehen haben.
Dann hilft folgende simple Funktion:
function email_i18n_substitute_text(&$postvar, &$form, &$mail){
$form['template'] = i18n_substitute_text($form['template']);
$form['template_copy'] = i18n_substitute_text($form['template_copy']);
}
\\
**email_i18n_substitute_text** muss dann als Funktion im Backend/Formular CP, wie oben beschrieben registriert werden. \\
Natürlich muss auch die entsprechende Sprachdatei dazu übersetzt werden.
\\