Eigene Formulare erstellen: Unterschied zwischen den Versionen
IT (Diskussion | Beiträge) (→Grundaufbau des Formulars) |
IT (Diskussion | Beiträge) (→Dateiupload in das Formular integrieren) |
||
(48 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
{{code|1=<div class="error">{errormsg}</div><br> | {{code|1=<div class="error">{errormsg}</div><br> | ||
− | <form method="POST" class="w- | + | <form method="POST" class="w-max--320px" name="contact" id="special_form" action="{URL}contactsend"><br> |
<input type="hidden" name="arrayname" value="mail_special_formular"><br> | <input type="hidden" name="arrayname" value="mail_special_formular"><br> | ||
− | <div class="input-field mandatory m- | + | <input type="hidden" name="p" value="311"><br> |
− | <div class="input-field mandatory m- | + | <div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" type="email" name="feed_email" value="{feed_email}" placeholder="E-Mail-Adresse"></div><br> |
− | <div class="input-field m- | + | <div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" type="text" name="name" value="{name}" placeholder="Name"></div><br> |
− | <div class="input-field m- | + | <div class="input-field m-t--m-r error-placement"><input class="w--100" type="textarea" name="textarea" value="{textarea}" placeholder="Bitte geben Sie hier Ihren Text ein"></div><br> |
− | <select name="dropdown" size="1" class=" | + | <div class="input-field m-t--m-r error-placement"><br> |
+ | <select name="dropdown" size="1" class="w--100"><br> | ||
<option value="1" {1_selected}>Option 1</option><br> | <option value="1" {1_selected}>Option 1</option><br> | ||
<option value="2" {2_selected}>Option 2</option><br> | <option value="2" {2_selected}>Option 2</option><br> | ||
Zeile 18: | Zeile 19: | ||
<div><span class="radio"><input type="radio" name="radiobutton" value="2" id="radio2" {radio_2_checked}><label for="radio2"></label></span><label for="radio2">Radio Button 2</label></div><br> | <div><span class="radio"><input type="radio" name="radiobutton" value="2" id="radio2" {radio_2_checked}><label for="radio2"></label></span><label for="radio2">Radio Button 2</label></div><br> | ||
<div><span class="checkbox"><input type="checkbox" name="checkbox" value="ja" id="checkbox" {checkbox}><label for="checkbox"></label></span><label for="checkbox">Checkbox</label></div><br> | <div><span class="checkbox"><input type="checkbox" name="checkbox" value="ja" id="checkbox" {checkbox}><label for="checkbox"></label></span><label for="checkbox">Checkbox</label></div><br> | ||
− | <input type="submit" name="senden" class="button_default big m- | + | <div class="input-field mandatory-- m-t--m-r contact_name"><br> |
+ | <label>Sollte leer bleiben</label><br> | ||
+ | <input type="text" id="email_address_name_search" name="email_address_name_search" class="w--100" autocomplete="off"><br> | ||
+ | </div><br> | ||
+ | <input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken"><br> | ||
</form>}} | </form>}} | ||
Zeile 24: | Zeile 29: | ||
=== Grundaufbau des Formulars === | === Grundaufbau des Formulars === | ||
{{code|1=<div class="error">{errormsg}</div><br> | {{code|1=<div class="error">{errormsg}</div><br> | ||
− | <form method="POST" class="w- | + | <form method="POST" class="w-max--320px" name="contact" id="special_form" action="{URL}contactsend"><br> |
<input type="hidden" name="arrayname" value="<span style="color:red">mail_special_formular</span>"><br> | <input type="hidden" name="arrayname" value="<span style="color:red">mail_special_formular</span>"><br> | ||
+ | <input type="hidden" name="p" value="<span style="color:red">311</span>"><br> | ||
.<br> | .<br> | ||
.<br> | .<br> | ||
.<br> | .<br> | ||
− | <input type="submit" name="senden" class="button_default big m- | + | <div class="input-field mandatory-- m-t--m-r contact_name"><br> |
+ | <label>Sollte leer bleiben</label><br> | ||
+ | <input type="text" id="email_address_name_search" name="email_address_name_search" class="w--100" autocomplete="off"><br> | ||
+ | </div><br> | ||
+ | <input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken"><br> | ||
</form>}} | </form>}} | ||
Zeile 37: | Zeile 47: | ||
Die öffnenden und schließenden Tags <form...> und </form> beschreiben das eigentliche Formular. | Die öffnenden und schließenden Tags <form...> und </form> beschreiben das eigentliche Formular. | ||
− | |||
− | ;p | + | Direkt unter dem öffnenden <form..>-Tag gibt es zwei versteckte Felder (<input type="hidden"...>), die im Attribut value individuell angepasst werden müssen. |
+ | |||
+ | ;Feld mit name="p" | ||
:Hier wird anstelle von '''311''' die Themennummer eingetragen, in dessen Thema das Formular eingebaut wird. | :Hier wird anstelle von '''311''' die Themennummer eingetragen, in dessen Thema das Formular eingebaut wird. | ||
− | + | ;Feld mit name="arrayname" | |
+ | :Hier wird anstelle von '''mail_special_formular''' die Bezeichnnug für das Array eingetragen, welches Sie in der layout.inc.php für die Parameterübergabe definieren. | ||
+ | |||
+ | {{wichtig|Der '''div-Bereich''', der in '''class''' auch den Wert '''contact_name''' enthält, ist wichtig für die Spam-Abwehr und sollte unbedingt hier mit enthalten sein. Es ist ein Feld, das für die Nutzer außerhalb des Sichtbereichs ist, von Spam-Robots aber befüllt wird und daran werden die Spam-Robots u.a. mit erkannt und entsprechender Spam kann abgefangen werden. | ||
+ | }} | ||
− | + | <div style="margin-left:10px; margin-bottom:10px; height:50px; background:linear-gradient(145deg, #cb2d3e 0%, #ef473a 100%);"> | |
− | + | <div style="padding: 15px 10px; font-weight:bold; font-size:14px; color:#ffffff;">Sofern die eMail-Funktionalität eingebunden wird, haben wir das Recht, bei einer fehlerhaften oder missbräuchlichen Implementierung die Seite oder den gesamten Shop vom Internet zu trennen, um unsere anderen Kunden zu schützen. | |
+ | </div></div> | ||
− | Die Zeile ''<input type="submit" name="senden" class="button_default big m- | + | Die Zeile ''<input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken">'', welche als letztes innerhalb des Formularbereiches steht, erzeugt einen Bestätigungs-Button, mit dem das Formular abgeschickt wird. |
Wenn Sie für die folgenden Formularelemente im class-Paramater des umschließenden '''div''' zusätzlich '''mandatory''' hinterlegen wird der Eingabebereich durch die Templates auch mit einem roten Stern gekennzeichnet. Im folgenden Eingabefeld wurde dies so wie benötigt eingerichtet. | Wenn Sie für die folgenden Formularelemente im class-Paramater des umschließenden '''div''' zusätzlich '''mandatory''' hinterlegen wird der Eingabebereich durch die Templates auch mit einem roten Stern gekennzeichnet. Im folgenden Eingabefeld wurde dies so wie benötigt eingerichtet. | ||
=== Eingabefeld / Input === | === Eingabefeld / Input === | ||
− | {{code|1=<div class="input-field mandatory m- | + | {{code|1=<div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" '''type'''="text" '''name'''="<span style="color:red">name</span>" '''value'''="{<span color="red">name</span>}" '''placeholder'''="Name"></div>}} |
Der Parameter für '''type''' sollte je nach Inhalt des Feldes gewählt werden (text/number). | Der Parameter für '''type''' sollte je nach Inhalt des Feldes gewählt werden (text/number). | ||
Zeile 61: | Zeile 77: | ||
Für den Parameter '''placeholder''' wird der Platzhalter gewählt, den der Nutzer sieht, bevor er selber etwas eingibt. | Für den Parameter '''placeholder''' wird der Platzhalter gewählt, den der Nutzer sieht, bevor er selber etwas eingibt. | ||
+ | {{wichtig|Falls der Kunde noch seine Mail angeben soll um eine Bestätigungsmail zu erhalten muss folgendes Feld definiert werden, hierbei ist der Name '''"feed_email"''' bereits vorgegeben und darf nicht umbenannt werden}} | ||
− | + | {{code|1=<div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" type="email" '''name="feed_email"''' value="{'''feed_email'''}" placeholder="E-Mail-Adresse"></div>}} | |
− | |||
− | |||
− | |||
− | {{code|1=<div class="input-field mandatory m- | ||
=== mehrzeiliges Eingabefeld / Textarea === | === mehrzeiliges Eingabefeld / Textarea === | ||
− | {{code|1=<div class="input-field m- | + | {{code|1=<div class="input-field m-t--m-r error-placement"><input class="w--100" type="textarea" name="<span style="color:red">textarea</span>" value="<span style="color:red">{textarea}</span>" placeholder="'''Bitte geben Sie hier Ihren Text ein'''"></div>}} |
Die rot hervorgehobenen Werte <span style="color:red">textarea</span> werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt. | Die rot hervorgehobenen Werte <span style="color:red">textarea</span> werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt. | ||
Zeile 76: | Zeile 89: | ||
=== Dropdown-Auswahl / Select === | === Dropdown-Auswahl / Select === | ||
− | {{code|1=<div class="input-field m- | + | {{code|1=<div class="input-field m-t--m-r error-placement"><br> |
− | <select '''name="<span style="color:red">dropdown</span>"''' '''size="1"''' class=" | + | <select '''name="<span style="color:red">dropdown</span>"''' '''size="1"''' class="w--100"><br> |
<option '''value="1"''' '''{1_selected}'''>'''Option 1'''</option><br> | <option '''value="1"''' '''{1_selected}'''>'''Option 1'''</option><br> | ||
<option '''value="2"''' '''{2_selected}'''>'''Option 2'''</option><br> | <option '''value="2"''' '''{2_selected}'''>'''Option 2'''</option><br> | ||
Zeile 122: | Zeile 135: | ||
= Mailtemplates bereitstellen = | = Mailtemplates bereitstellen = | ||
+ | Einmal als HTML-Version unter ''/templ/mail/txt/mail_special_form.txt'' | ||
+ | |||
{{code|1=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br> | {{code|1=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br> | ||
<html><br> | <html><br> | ||
Zeile 210: | Zeile 225: | ||
Das HTML-Template beginnt mit einer Definition von Formvorgaben und wird wie als HTML-Tabelle strukturiert um Mail-Client übergreifende saubere Darstellung zu sichern. | Das HTML-Template beginnt mit einer Definition von Formvorgaben und wird wie als HTML-Tabelle strukturiert um Mail-Client übergreifende saubere Darstellung zu sichern. | ||
− | Die mit geschwungenen Klammern umrahmten Template-Variablen entsprechen dem '''name'''-Parameter der im Formular definierten Eingabe-Felder | + | {{wichtig|Die mit geschwungenen Klammern umrahmten Template-Variablen entsprechen dem '''name'''-Parameter der im Formular definierten Eingabe-Felder}} |
'''Zusatz:''' | '''Zusatz:''' | ||
Zeile 222: | Zeile 237: | ||
{{code|1=$mail_special_formular = array(<br> | {{code|1=$mail_special_formular = array(<br> | ||
'template' => 'mail_special_form',<br> | 'template' => 'mail_special_form',<br> | ||
− | 'email' => test@e-vendo.de',<br> | + | 'email' => 'test@e-vendo.de',<br> |
'variables' => array('feed_email',<br> | 'variables' => array('feed_email',<br> | ||
'name',<br> | 'name',<br> | ||
Zeile 243: | Zeile 258: | ||
# alle Felder des Formulars erst mal einlesen<br> | # alle Felder des Formulars erst mal einlesen<br> | ||
− | foreach ($mail_special_formular['variables'] as $key => $item)<br> | + | foreach ($mail_special_formular['variables'] as $key => $item) {<br> |
$$item = postinput2php($item);<br> | $$item = postinput2php($item);<br> | ||
+ | }<br> | ||
# pruefen, ob die erforderlichen Angaben vorgenommen worden sind<br> | # pruefen, ob die erforderlichen Angaben vorgenommen worden sind<br> | ||
Zeile 361: | Zeile 377: | ||
Hierbei muss der jeweilige Aufbau der Zeile vor allem bei Select-Feldern, Radiobuttons und Checkboxen beachtet werden. | Hierbei muss der jeweilige Aufbau der Zeile vor allem bei Select-Feldern, Radiobuttons und Checkboxen beachtet werden. | ||
+ | |||
+ | = Dateiupload in das Formular integrieren = | ||
+ | |||
+ | Soll das Formular die Möglichkeit bieten, Dateien hochzuladen, so dass diese den Empfänger der Mail in der Mail als Attachement erreichen, so muss folgendes getan werden: | ||
+ | |||
+ | == Formular-Tag um Attribut enctype erweitern == | ||
+ | Das Formular-Tag muss das Attribut enctype mit dem Wert multipart/form-data erhalten. | ||
+ | {{code|1=<form method="POST" ... <span style="color:red">enctype="multipart/form-data"</span> ...>}} | ||
+ | |||
+ | == Konfigurationsarray um 'file_uploads' erweitern == | ||
+ | Das für das Formular in der layout.inc.php konfigurierte Array muss um den Eintrag 'file_uploads' erweitert werden. | ||
+ | {{code|1=$mail_special_formular = array(<br> | ||
+ | ...<br> | ||
+ | <span style="color:red">'file_uploads' => array('uploadfieldname1', 'uploadfieldname2')</span><br> | ||
+ | ...<br> | ||
+ | ); | ||
+ | }} | ||
+ | ;file_uploads | ||
+ | :Array mit den Feldnamen der Dateiupload-Eingabefelder | ||
+ | |||
+ | == Eingabefeld(er) für Dateiupload in das Formular aufnehmen == | ||
+ | Das Eingabefeld für den Datei-Upload ist mit aufzunehmen. | ||
+ | |||
+ | Eingabefeld für die Aufnahme EINER Upload-Datei: | ||
+ | {{code|1=<input ... name="uploadfieldname1" <span style="color:red">type="file" accept="application/pdf"</span> ... />}} | ||
+ | In name wird der Feldname übergeben, type muss den Wert file haben und in accept kann man die akzeptierten Mimetyps angeben. | ||
+ | |||
+ | Eingabefeld für die Aufnahme mehrerer Upload-Dateien: | ||
+ | {{code|1=<input ... name="uploadfieldname2<span style="color:red">[]</span>" type="file" accept="application/pdf" <span style="color:red">multiple</span>/>}} | ||
+ | Hier ist zu beachten, dass an den Feldnamen [] angehängt wird und das Attribut multiple mit aufgenommen wird. | ||
+ | |||
+ | == Mail-Template erweitern == | ||
+ | Wenn mehr als ein Dateiupload-Feld im Formular ist, dann kann es sinnvoll sein, dass die Mail an den Empfänger eine Information darüber erhält, welche der in der Mail mitgesendeten Dateien über welches Feld mitgegeben worden sind. Von daher stehen in den Mailtemplates zusätzlich Templatevariablen zur Verfügung mit dem Namen der Dateiupload-Eingabefelder. Es werden dann die Dateinamen dort ausgegeben. Wenn es sich um ein multiple-Dateiupload-Eingabefeld handelt und mehr als eine Datei übergeben worden ist, so sind alle Dateinamen mit Komma vonenander getrennt, in der Ausgabe enthalten. | ||
+ | Um also auf das obige Beispiel Bezug zu nehmen, würden die Templatevariablen {uploadfieldname1} und {uploadfieldname2} zur Verfügung stehen. |
Aktuelle Version vom 6. Juli 2022, 12:02 Uhr
Inhaltsverzeichnis
Formular über Thema einbauen
Beispiel
Im nachfolgenden Block ist ein Beispiel für ein individuelles Formular, wie es im Thementext eingebaut werden kann. Die einzelnen Bestandteile werden im folgenden Abschnitt noch Schritt für Schritt erklärt.
<form method="POST" class="w-max--320px" name="contact" id="special_form" action="{URL}contactsend">
<input type="hidden" name="arrayname" value="mail_special_formular">
<input type="hidden" name="p" value="311">
<div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" type="email" name="feed_email" value="{feed_email}" placeholder="E-Mail-Adresse"></div>
<div class="input-field mandatory m-t--m-r error-placement"><input class="w--100" type="text" name="name" value="{name}" placeholder="Name"></div>
<div class="input-field m-t--m-r error-placement"><input class="w--100" type="textarea" name="textarea" value="{textarea}" placeholder="Bitte geben Sie hier Ihren Text ein"></div>
<div class="input-field m-t--m-r error-placement">
<select name="dropdown" size="1" class="w--100">
<option value="1" {1_selected}>Option 1</option>
<option value="2" {2_selected}>Option 2</option>
</select>
</div>
<div><span class="radio"><input type="radio" name="radiobutton" value="1" id="radio1" {radio_1_checked}><label for="radio1"></label></span><label for="radio1">Radio Button 1</label></div>
<div><span class="radio"><input type="radio" name="radiobutton" value="2" id="radio2" {radio_2_checked}><label for="radio2"></label></span><label for="radio2">Radio Button 2</label></div>
<div><span class="checkbox"><input type="checkbox" name="checkbox" value="ja" id="checkbox" {checkbox}><label for="checkbox"></label></span><label for="checkbox">Checkbox</label></div>
<div class="input-field mandatory-- m-t--m-r contact_name">
<label>Sollte leer bleiben</label>
<input type="text" id="email_address_name_search" name="email_address_name_search" class="w--100" autocomplete="off">
</div>
<input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken">
Erklärung
Grundaufbau des Formulars
<form method="POST" class="w-max--320px" name="contact" id="special_form" action="{URL}contactsend">
<input type="hidden" name="arrayname" value="mail_special_formular">
<input type="hidden" name="p" value="311">
.
.
.
<div class="input-field mandatory-- m-t--m-r contact_name">
<label>Sollte leer bleiben</label>
<input type="text" id="email_address_name_search" name="email_address_name_search" class="w--100" autocomplete="off">
</div>
<input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken">
Die Zeile <div class="error">{errormsg}</div> nutzen wir um mögliche Fehler auszugeben, falls es ein Problem beim Abschicken des Formulares mit einem der Felder gab.
Die öffnenden und schließenden Tags <form...> und </form> beschreiben das eigentliche Formular.
Direkt unter dem öffnenden <form..>-Tag gibt es zwei versteckte Felder (<input type="hidden"...>), die im Attribut value individuell angepasst werden müssen.
- Feld mit name="p"
- Hier wird anstelle von 311 die Themennummer eingetragen, in dessen Thema das Formular eingebaut wird.
- Feld mit name="arrayname"
- Hier wird anstelle von mail_special_formular die Bezeichnnug für das Array eingetragen, welches Sie in der layout.inc.php für die Parameterübergabe definieren.
Die Zeile <input type="submit" name="senden" class="button_default big m-t--s-r" value="Formular abschicken" title="Formular abschicken">, welche als letztes innerhalb des Formularbereiches steht, erzeugt einen Bestätigungs-Button, mit dem das Formular abgeschickt wird.
Wenn Sie für die folgenden Formularelemente im class-Paramater des umschließenden div zusätzlich mandatory hinterlegen wird der Eingabebereich durch die Templates auch mit einem roten Stern gekennzeichnet. Im folgenden Eingabefeld wurde dies so wie benötigt eingerichtet.
Eingabefeld / Input
Der Parameter für type sollte je nach Inhalt des Feldes gewählt werden (text/number).
Die rot hervorgehobenen Werte name werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
Für den Parameter placeholder wird der Platzhalter gewählt, den der Nutzer sieht, bevor er selber etwas eingibt.
mehrzeiliges Eingabefeld / Textarea
Die rot hervorgehobenen Werte textarea werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
Für den Parameter placeholder wird der Platzhalter gewählt, den der Nutzer sieht, bevor er selber etwas eingibt.
Dropdown-Auswahl / Select
<select name="dropdown" size="1" class="w--100">
<option value="1" {1_selected}>Option 1</option>
<option value="2" {2_selected}>Option 2</option>
</select>
Der rot hervorgehobene Wert dropdown wird durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
size=1 gibt an, dass die Darstellung 1-zeilig erfolgt. Erhöht man diesen Wert, wird die hinterlegte Anzahl an Auswahlmöglichkeiten im Feld direkt untereinander ausgegeben, wodurch sich direkt die Darstellung ändert.
Für jeden auswählbaren Wert muss eine eigener option-tag angelegt werden. Der Text zwischen dem öffnenden <option...> und schließenden </option> wird dem Nutzer ausgegeben, die jeweils bei value hinterlegten Werte werden an die Software übergeben und später im Mailtemplate auch so eingefügt.
Innerhalb der geschwungenen Klammern muss folgende Struktur eingehalten werden:
{(value der option)_selected}
Leerzeichen im value müssen durch Binde- oder Unterstriche ersetzt werden.
Radio Button
<div><span class="radio"><input type="radio" name="radiobutton" value="2" id="radio2" {radio_2_checked}><label for="radio2"></label></span><label for="radio2">Radio Button 2</label></div>
Die rot hervorgehobenen Werte radiobutton werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
Bei value=“1“ kann anstelle von „1“ der Wert definiert werden der an die Software übergeben und dann auch in der fertigen Mail ausgegeben werden soll wenn die Checkbox aktiviert wurde. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
Die id des Radiobuttons und der for-Parameter der beiden Label müssen identisch sein. Der Name kann hier beliebig gewählt werden.
Innerhalb der geschwungenen Klammern muss folgende Struktur eingehalten werden:
{radio_(value der option)_checked}
Leerzeichen im value müssen durch Binde- oder Unterstriche ersetzt werden.
Checkbox
Die rot hervorgehobenen Werte checkbox werden durch die gewünschte Bezeichnung für das Feld ersetzt, wie es auch im Übergabearray der layout.inc.php definiert ist. Hierbei müssen Leerzeichen durch Binde- oder Unterstriche ersetzt werden, da es sonst zu Fehlern kommt.
Bei value=“ja“ kann anstelle von „ja“ der Wert definiert werden, der an die Software übergeben und dann auch in der fertigen Mail ausgegeben werden soll, wenn die Checkbox aktiviert wurde.
Der Text Checkboxbeschreibung kann durch einen beliebigen Text ersetzt werden, welcher neben der Checkbox erscheint.
Mailtemplates bereitstellen
Einmal als HTML-Version unter /templ/mail/txt/mail_special_form.txt
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>{s}Formularanfrage{e}</title>
<style type="text/css">
div, p, a, li, td, span { font-family:Arial,Helvetica; font-size:14px; -webkit-text-size-adjust:none; } /* Defaults festlegen und Layout glitches in iOS vermeiden*/
h1, h2, h3, h4 { font-size:22px; } /* Defaults fuer Ueberschriften setzen */
body { -webkit-text-size-adjust: 100%; } /* Font-Scaling auf iOS verhindern */
table td, table th { border:0px; padding:5px; }
img { max-width:100%; height:auto; border:0px; } /*responsive Bildergroessen */
table[class=button], .button { background-color:#0091d0; min-height:44px; min-width:44px;}
table[class=button] td, .button td { padding:4px 10px; }
table[class=button] a:hover span, .button a:active span, .button a:hover span, .button a:active span { color:#eeeeee; }
table[class=button] span, .button span { color:#ffffff; font-weight:bold; text-decoration:none; }
@media only screen and (max-width:620px) {
table[class=headercell] img, .headercell img { width:100%; }
table[class=content], .content { width:100%; }
}
</style>
</head>
<body>
<table width="90%">
{MAIL_HEADER_LOGO}
<tr>
<td align="center">
<table class="content" width="600">
<tr>
<td><h1>Mail an den Shopbesitzer</h1></td>
</tr>
<tr><td><hr></td></tr>
<tr>
<td>E-Mail-Adresse: </td>
<td>{feed_email}</td>
</tr>
<tr>
<td>Name: </td>
<td>{name}</td>
</tr>
<tr>
<td>Beschreibung: </td>
<td>{textarea}</td>
</tr>
<tr>
<td>Dropdown Auswahl: </td>
<td>{dropdown}</td>
</tr>
<tr>
<td>Radiobutton Auswahl: </td>
<td>{radiobutton}</td>
</tr>
<tr>
<td>Zusatzfunktion: </td>
<td>{checkbox}</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
...und einmal als Textversion unter /templ/mail/txt/mail_special_form.txt
=========================================
Mail an den Shopbetreiber
{s}E-Mail-Adresse:{e} {feed_email}
{s}Name:{e} {name}
{s}Beschreibung:{e} {textarea}
{s}Dropdown Auswahl:{e} {dropdown}
{s}Radiobutton Auswahl:{e} {radiobutton}
{s}Zusatzfunktion:{e} {checkbox}
{s}Mit freundlichen Grüßen{e}
{s}Ihr Team des Onlineshops {shoptitel}{e}
Die Bezeichnung des Templates, im Beispiel mail_special_form kann beliebig gewählt werden, solange nicht bereits ein Template mit diesem Namen vorhanden ist und es überall als HTML- und Text-Version richtig hinterlegt wird.
Das HTML-Template beginnt mit einer Definition von Formvorgaben und wird wie als HTML-Tabelle strukturiert um Mail-Client übergreifende saubere Darstellung zu sichern.
Zusatz:
Wenn Sie auch dem Kunden auch eine Bestätigung rausschicken wollen, benötigen Sie hierfür 2 weitere Templates, die ähnlich hinterlegt werden. Hierfür müssen im Formular das Feld feed_email befüllt sein und weitere Konfigurationen in der layout.inc.php vorgenommen werden.
layout.inc.php erweitern
Beispiel
Folgender Code wird in der layout.inc.php eingefügt.
'template' => 'mail_special_form',
'email' => 'test@e-vendo.de',
'variables' => array('feed_email',
'name',
'textarea',
'dropdown',
'radiobutton',
'checkbox'),
'subject' => 'Formularanfrage',
'function' => 'special_formular_anfrage',
'antwort_template' => 'mail_special_form_antwort'
);
- -------------------------------------------------------------------------
function special_formular_anfrage()
- -------------------------------------------------------------------------
{
global $mail_special_formular, $tpl, $feed_email, $special_thementextassigns;
$bNichtSenden = false;
# alle Felder des Formulars erst mal einlesen
foreach ($mail_special_formular['variables'] as $key => $item) {
$$item = postinput2php($item);
}
# pruefen, ob die erforderlichen Angaben vorgenommen worden sind
$strError = ;
if (!$name)
$strError .= ($strError ? '<br />' : ).'Bitte geben Sie Ihren Namen an!';
if ($strError) {
# es gab einen Fehler, das Formular wurde nicht vollstaendig ausgefuellt, wir moechten also auf die Seite zurueckfallen, die bestehenden
# Inhalte mit eintragen und auch die Fehlermeldung anzeigen
$special_thementextassigns = array(
'errormsg' => "Ihre Anfrage kann noch nicht gesendet werden, da die Daten unvollständig waren.<p>$strError</p>"
, 'feed_email' => $feed_email
, 'name' => $name
, 'textarea' => $textarea
, $dropdown.'_selected' => 'selected = "selected"'
, 'radio_'.$radiobutton.'_checked' => 'checked = "checked"'
, 'checkbox' => $checkbox ? 'checked = "checked"' : );
$bNichtSenden = true;
} else {
# hier können zum Beispiel weitere Dinge definiert werden, die ausgeführt werden, wenn das Formular erfolgreich abgeschickt wird
}
return $bNichtSenden;
Array mit übergebenen Werten
'template' => 'mail_special_form',
'email' => 'test@e-vendo.de',
'variables' => array('feed_email',
'name',
'textarea',
'dropdown',
'radiobutton',
'checkbox'),
'subject' => 'Formularanfrage',
'function' => 'special_formular_anfrage',
'antwort_template' => 'mail_special_form_antwort'
Der Name des Arrays ohne Dollarzeichen ist der gleiche, der im Formular ganz oben im Form-Tag definiert wurde.
Nachfolgend eine kurze Erklärung der einzelnen Zeilen...
- template
- Der Name des Mail-Templates welches nach Abschluss des Formulares rausgeschickt werden soll (ohne Dateiendung).
- An die hier angegebene E-Mail-Adresse wird nach Absenden des Formulars eine Mail verschickt.
- variables
- Beinhaltet ein weiteres Array mit den name-Parametern der im Formular eingebauten Felder.
- subject
- Der Titel der ausgehenden E-Mail.
- function
- Der Name der nachfolgenden Funktion, in deren Inhalt der weitere Ablauf definiert wird.
- antwort_template (optional)
- Ist dieser Wert definiert und befüllt, erhält der Kunde wenn sämtliche weiteren Bedingungen erfüllt sind (Inputfeld mit E-Mail mit name=feed_email im Formular, Auflistung von feed_email unter den Übergabevariablen und vorhanden sein der entsprechenden Templates als HTML- und TXT-Version) auch eine Bestätigungs-E-Mail. Als Inhalt wird der Name der jeweiligen Mailtemplates ohne Dateiendung hinterlegt.
Funktion für die Formularverarbeitung
 :; function special_formular_anfrage()
- -------------------------------------------------------------------------
{
global $mail_special_formular, $tpl, $feed_email, $special_thementextassigns;
$bNichtSenden = false;
# alle Felder des Formulars erst mal einlesen
foreach ($mail_special_formular['variables'] as $key => $item)
 :; $$item = postinput2php($item);
# pruefen, ob die erforderlichen Angaben vorgenommen worden sind
$strError = ;
if (!$name)
$strError .= ($strError ? '<br />' : ).'Bitte geben Sie Ihren Namen an!';
if ($strError) {
# es gab einen Fehler, das Formular wurde nicht vollstaendig ausgefuellt, wir moechten also auf die Seite zurueckfallen, die bestehenden
# Inhalte mit eintragen und auch die Fehlermeldung anzeigen
$special_thementextassigns = array(
'errormsg' => "Ihre Anfrage kann noch nicht gesendet werden, da die Daten unvollständig waren.<p>$strError</p>"
, 'feed_email' => $feed_email
, 'name' => $name
, 'textarea' => $textarea
, $dropdown.'_selected' => 'selected = "selected"'
, 'radio_'.$radiobutton.'_checked' => 'checked = "checked"'
, 'checkbox' => $checkbox ? 'checked = "checked"' : );
$bNichtSenden = true;
} else {
# hier können zum Beispiel weitere Dinge definiert werden, die ausgeführt werden, wenn das Formular erfolgreich abgeschickt wird
}
return $bNichtSenden;
Der Name der Funktion special_formular_anfrage() wurde im vorherigem Schritt unter function definiert. Die grobe Struktur der Vorgabe sollte eingehalten werden, anzupassende Stellen wären unter anderem die Fehlerermittlung...
Hier wird geprüft, ob ein Feld, welches wir als Pflichtfeld definieren wollen, auch befüllt ist. Im unserem Beispiel prüfen wir das im Formular hinterlegte Feld mit dem name-Parameter name. Falls dieses bei Absenden des Formulars leer übermittelt wird, landet der Nutzer wieder auf der Formular-Seite und bekommt die rot hinterlegte Fehlermeldung angezeigt. Für jedes weitere Feld, welches auf diese Weise geprüft werden soll, wird ein ähnlicher Eintrag angelegt bei dem der Name in der Prüfung und die entsprechende Fehlermeldung angepasst werden muss.
Innerhalb des Arrays $special_thementextassigns werden sowohl eine allgemeine Fehlermeldung definiert sowie sämtliche Felder mit den vom Nutzer ausgewählten Werten erneut vorbefüllt, falls der Nutzer vergessen hatte eines der Felder zu befüllen.
'errormsg' => "Ihre Anfrage kann noch nicht gesendet werden, da die Daten unvollständig waren.<p>$strError</p>"
, 'feed_email' => $feed_email
, 'name' => $name
, 'textarea' => $textarea
, $dropdown.'_selected' => 'selected = "selected"'
, 'radio_'.$radiobutton.'_checked' => 'checked = "checked"'
Hierbei muss der jeweilige Aufbau der Zeile vor allem bei Select-Feldern, Radiobuttons und Checkboxen beachtet werden.
Dateiupload in das Formular integrieren
Soll das Formular die Möglichkeit bieten, Dateien hochzuladen, so dass diese den Empfänger der Mail in der Mail als Attachement erreichen, so muss folgendes getan werden:
Formular-Tag um Attribut enctype erweitern
Das Formular-Tag muss das Attribut enctype mit dem Wert multipart/form-data erhalten.
Konfigurationsarray um 'file_uploads' erweitern
Das für das Formular in der layout.inc.php konfigurierte Array muss um den Eintrag 'file_uploads' erweitert werden.
...
'file_uploads' => array('uploadfieldname1', 'uploadfieldname2')
...
- file_uploads
- Array mit den Feldnamen der Dateiupload-Eingabefelder
Eingabefeld(er) für Dateiupload in das Formular aufnehmen
Das Eingabefeld für den Datei-Upload ist mit aufzunehmen.
Eingabefeld für die Aufnahme EINER Upload-Datei:
In name wird der Feldname übergeben, type muss den Wert file haben und in accept kann man die akzeptierten Mimetyps angeben.
Eingabefeld für die Aufnahme mehrerer Upload-Dateien:
Hier ist zu beachten, dass an den Feldnamen [] angehängt wird und das Attribut multiple mit aufgenommen wird.
Mail-Template erweitern
Wenn mehr als ein Dateiupload-Feld im Formular ist, dann kann es sinnvoll sein, dass die Mail an den Empfänger eine Information darüber erhält, welche der in der Mail mitgesendeten Dateien über welches Feld mitgegeben worden sind. Von daher stehen in den Mailtemplates zusätzlich Templatevariablen zur Verfügung mit dem Namen der Dateiupload-Eingabefelder. Es werden dann die Dateinamen dort ausgegeben. Wenn es sich um ein multiple-Dateiupload-Eingabefeld handelt und mehr als eine Datei übergeben worden ist, so sind alle Dateinamen mit Komma vonenander getrennt, in der Ausgabe enthalten. Um also auf das obige Beispiel Bezug zu nehmen, würden die Templatevariablen {uploadfieldname1} und {uploadfieldname2} zur Verfügung stehen.