Seit kurzem ist die Version 4.0 der feinen Formularextension Mailformplus im Repository zu finden.
Sie hat Einiges zu bieten: neben der Darstellung mit eigenem HTML-Template, welches ein eigenes CSS nachladen kann, ist es per Typoscript möglich, die Felder validieren zu lassen (dazu gibts dann natürlich auch die passende Fehlerausgabe). Das Formular kann sich außerdem auf mehrere Seiten erstrecken (multipage) und bietet zudem noch Captcha Support.
An der neuen Version haben anscheinden ne Menge Leute daran gearbeitet und dem Autor der Extension hilfreich zur Seite gestanden. Neben Mehrsprachigkeit, Spamschutz und einigen Bugfixes gibt es nun auch die Möglichkeit, die Felder / Eingabedaten mit einer eigenen Funktion zu überprüfen (siehe Hook for custom validation auf der Dokuseite ), welche ich dieser sehr guten und flexiblen Extension gerne beisteuerte.
Diese Funktionalität hatte mir persönlich noch gefehlt, da in der vorherigen Version nur auf ein paar vordefinierte Validierungsfunktionen zurückgegriffen werden konnte. Zudem bietet das Validieren mit dieser Methode die Möglichkeit, detailliertere und besser beschreibende Fehlermeldungen auszugeben. Weiterhin kann man damit auch Checkboxen und Radiobuttons prüfen.
In 3 Schritten zur eigenen Überprüfung der Daten / Validierung:
1) eigene Validierungsfunktion konfigurieren
Um den Hook zu nutzen, muss in der TS-Konfiguration von Mailformplus die
plugin.tx_thmailformplus_pi1.errorUserFunc = EXT:myext/class.user_myvalidation.php:user_myvalidation->user_validate
gesetzt sein. Im obigen Beispiel wird eine Instanz der Klasse user_myvalidation (File: class.user_myvalidation.php aus dem Extensionverzeichnis myext) erstellt und deren Methode user_validate aufgerufen.
2) die Eingabefelder für die eigene Validierung konfigurieren
plugin.tx_thmailformplus_pi1.fieldConf.[name of inputfield].errorCheck = userValidation
plugin.tx_thmailformplus_pi1.fieldConf.[name of inputfield].errorCheck{
checkFor = telephone
param2 = ger
}Der Parameter checkFor ist hier nur beispielhaft angegeben; man kann ihn in der eigenen Validierungsmethode per $params['checkFor'] aufrufen, um z.B. über eine switch-case Anweisung auf die verschiedenen Validierungen einzugehen (in diesem Beispiel nimmt die Variable den Wert “telephone” an).
Es können beliebige weitere Parameter angegeben werden, welche ebenfalls über $params[NAME_DES_PARAMETERS] ansprechbar sind.
Der zu überprüfende Wert des Inputfeldes ist über die Variable $params['value'] erreichbar.
3) Die Validierungsfunktion schreiben
class.user_myvalidation.phpclass user_myvalidation {
function user_validate(&$params, &$ref){ $input = $params['value']; switch($params['checkFor']){ case "telephone": /* option 1 */ $error = preg_match("/[+]?([0-9]+[s]?)+/",$input); /* extended version with custom error messages */ if(strlen($input) < 1){ $error = array("errorFound"=>1,"errorText"=>'Please fill out this field'); } else{ $errorFound = preg_match("/[+]?([0-9]+[s]?)+/",$input); $error = array("errorFound"=>$errorFound,"errorText"=>'Please enter a valid telephone number'); } break; case "email": ... } return $error;
} }
Wie man in dem Beispiel gezeigt, kann die Übergabe eines gefundenen Fehlers auf zwei Wegen geschehen:
a) als boolean - ein Fehler wurde (nicht) gefunden
b) als array (”errorFound”=>boolean, “errorText”=>eigene Fehlernachricht, welche TS Einstellungen überschreibt”);
Mit der zweiten Variante hat man die Möglichkeit die Usability deutlich zu verbessern, da treffende Fehlermeldungen definiert werden können.




-Wunschzettel
Ich befasse mich seit 2004 mit Webdesign & Programmierung und studiere zur Zeit Medieninformatik an der HTW Dresden. 
Kommentar von mediavrog
Du kannst zum Beispiel den Wert des E-Mail-Feldes in der Session speichern und beim Prüfen des “E-Mail wiederholen”-Feldes vergleichen..
Kommentar von Maik
Hallo,
erstmal vielen Dank für deine “Erweiterung der Erweiterung” :-).
Eine Frage habe ich aber noch: Kommt man irgendwie an ein weiteres “inputfield” aus dem zu überprüfenden Formular heran, z.B.: wenn man zwei Felder (Email-Addresse, Bestätigung der Email-Addresse) vergleichen möchte.
Kommentar von mediavrog
Danke für den Tipp - habs geändert
Kommentar von Andreas
Hallo,
was macht der “_” hinter plugin.tx_thmailformplus_pi1 bei Definition der UDF? Ohne den funktioniert das Ganze nämlich wunderbar