Eigene Formulare erstellen: Unterschied zwischen den Versionen
IT (Diskussion | Beiträge) (→Grundaufbau des Formulars) |
IT (Diskussion | Beiträge) (→Beispiel) |
||
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-max_320px" name="contact" id="special_form" action="{URL}contactsend | + | <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> | ||
+ | <input type="hidden" name="p" value="311"><br> | ||
<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 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 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 mandatory m-t_m-r error-placement"><input class="w_100" type="text" name="name" value="{name}" placeholder="Name"></div><br> |
Version vom 22. September 2020, 16:24 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>
<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&p=311">
<input type="hidden" name="arrayname" value="mail_special_formular">
.
.
.
<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.
Im Formular muss beim Attribut action in der URL etwas angepasst werden:
- p=311
- Hier wird anstelle von 311 die Themennummer eingetragen, in dessen Thema das Formular eingebaut wird.
Im versteckten Feld (type="hidden") mit name="arrayname" muss der Wert (Attribut value) konkret festgelegt werden.
- value="mail_special_formular" für verstecktes 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.
Zusatz:
Falls der Kunde noch seine Mail angeben soll um eine Bestätigungsmail zu erhalten muss folgendes Feld definiert werden, hierbei ist name=“feed_email“ bereits vorgegeben und darf nicht umbenannt werden.
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
<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.
Die mit geschwungenen Klammern umrahmten Template-Variablen entsprechen dem name-Parameter der im Formular definierten Eingabe-Felder.
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.