Am 24.11.2011 ist die neue und vor allem stabile Version 1.0.0 von formhandler rausgekommen. Geil finde ich, dass formhandler nun eine eigene Webseite erhalten hat inkl. Doku, News und vielen Beispielen. Ich habe mir diese Extension mal unter den Nagel gerissen und ein Projekt gesucht, das ich damit umsetzen kann. Ein Kontaktformular wäre zu Standard außerdem gibt es dafür bessere Lösungen wie powermail und/oder vielleicht auch die neue Formextension innerhalb von TYPO3 4.6. Nein…ich habe mich für eine Newsletteranmeldung entschieden, da die meisten Newsletteranmelde-Extensions aus 2006 sind, oder viel zu große andere Extensions parallel benötigen.
Im folgenden Tutorial werden wir kaum Angaben im Plugin vom Formhandler machen. Alles was wir benötigen sind 4 Dateien und eine Zeile TypoScript. Vor- und zugleich Nachteil von Formhandler ist, dass jegliche Konfiguration in Dateien ausgelagert werden muss/sollte, was dann aber wiederum den Vorteil hat, dass diese Konfiguration sehr schnell auf ein anderes System portieren kann. Nach der Einbindung der TypoScriptzeile erscheint im Plugin ein neuer Eintrag in der Selectbox für „Vordefinierte Formulare“. Einfach auswählen. Fertig.
Ich werde hier nicht auf jede einzelne Option von Formhandler eingehen, das würde den Rahmen sprengen. Wenn es Euch interessiert, dann könnt Ihr die Webseite von Formhandler oder auch mein erstes Tutorial lesen, dass ich auf meiner Webseite präsentiere: Stefans TYPO3-Seite.
Ablauf der Anmeldung
Wir erstellen eine Seite mit einem Formular auf dem sich die beiden Felder name und email befinden. Nach dem Absenden werden die eingetragenen Daten zunächst validiert (Tx_Formhandler_Validator_Default) und bei Erfolg in die Tabelle tt_address abgespeichert (Finisher_DB). Hier setze ich die Spalte hidden per default auf 1, damit der User nicht sofort aktiv ist. Natürlich wäre auch eine Speicherung in fe_users möglich, aber dann müssten wir dem Datensatz noch eine Gruppe, einen Benutzernamen und ein Passwort zuordnen. Zu viel für meinen Geschmack. Nach der Speicherung wird aus den gesammelten Daten ein AuthCode erstellt (Finisher_GenerateAuthCode) und per Mail an der User und als Info auch an den Admin geschickt (Tx_Formhandler_Finisher_Mail). Klickt der User den Link mit dem enthaltenen AuthCode an, wird der PreProcessor aktiv (PreProcessor_LoadGetPost) und läd sich die benötigten Daten aus der URL in den Speicher. An Hand dieser Daten kann der AuthCode-Validator aktiv werden (PreProcessor_ValidateAuthCode). Dieser überprüft, ob der AuthCode gültig ist und setzt den Datensatz bei einer erfolgreichen Überprüfung automatisch auf visible (hidden=0). Außerdem können hier je nach Gültigkeit Page-UIDs angegeben werden auf die weitergeleitet wird.
newsletter.ts
plugin.Tx_Formhandler.settings.predef.newsletter { # Common configuration name = Newsletterregistrierung addErrorAnchors = 1 templateFile = fileadmin/templates/formhandler/newsletter.html langFile.1 = fileadmin/templates/formhandler/newsletter.xml cssFile.1 = fileadmin/templates/formhandler/newsletter.css formValuesPrefix = formhandler requiredSign = TEXT requiredSign.value = * requiredSign.wrap = <span style="color: #df9707;">|</span> isErrorMarker.default = class="errorField" # HTML wrapping by validation error errorListTemplate { totalWrap = |
- |
singleWrap =
- |
} #PreProcessors preProcessors { 1.class = PreProcessor_LoadGetPost 2.class = PreProcessor_ValidateAuthCode 2.config { redirectPage = 234 errorRedirectPage = 235 hiddenField = hidden } } # Validators configuration validators { 1 { class = Tx_Formhandler_Validator_Default config { fieldConf { name { errorCheck.1 = required } email { errorCheck.1 = required errorCheck.2 = email } } } } } # Finishers configuration finishers { 1.class = Finisher_DB 1.config { table = tt_address key = uid fields { email.mapping = email name.mapping = name pid.ifIsEmpty = 57 hidden.ifIsEmpty = 1 module_sys_dmail_html.ifIsEmpty = 1 } } 2.class = Finisher_GenerateAuthCode 2.config { table = tt_address } 3.class = Tx_Formhandler_Finisher_Mail 3.config { limitMailsToUser = 5 admin { to_email = AdminEmailAdresse to_name = DeinNamw subject = Neue Newsletterregistrierung auf [webseite] sender_email = webmaster@xxx sender_name = Webmaster htmlEmailAsAttachment = 0 } user { to_email = email to_name = name subject = Dein Anliegen von [webseite] sender_email = webmaster@xxx sender_name = Webmaster replyto_email = DeineEmailAdresse replyto_name = TEXT replyto_name.value = Deine Name htmlEmailAsAttachment = 0 } } 4.class = Finisher_Redirect 4.config { redirectPage = 233 } } }
newsletter.xml
<!--?xml version="1.0" encoding="utf-8" standalone="yes" ?--> <label>Name</label> <label>E-Mail</label> <label>Send</label> <label>One or more errors occoured while filling the form!</label> <label>Enter your name!</label> <label>Enter your E-mail address!</label> <label>E-mail address must be valid syntax!</label> <label>Fields marked with * are required!</label> <label>Name</label> <label>E-Mail</label> <label>Absenden</label> <label>Beim Absenden des Formulars sind ein paar Fehler aufgetreten:!</label> <label>Bitte gib Deinen Namen an!</label> <label>Bitte gib Deine E-Mail-Adresse an!</label> <label>Die eingetragene E-Mail-Adresse ist ungültig!</label> <label>Felder mit * sind Pflichtfelder!</label> |
newsletter.html
<!-- ###TEMPLATE_FORM1### begin --> |
Hallo ###value_name###, Du hast Dich soeben für meinen Newsletter auf [webseite] angemeldet. Bitte klicke auf den folgenden Link, um die Registrierung abzuschließen: ###value_authCodeUrl###
Hallo ###value_name###
Du hast Dich soeben für meinen Newsletter auf [webseite] angemeldet.
Bitte klicke auf den folgenden Link, um die Registrierung abzuschließen:
Newsletteranmeldung bestätigen
Hallo Admin, Soeben hat sich ###value_name### (###value_email###) für den Newsletter auf [webseite] angemeldet. Dein Server
Hallo Admin,
Soeben hat sich ###value_name### (###value_email###) für den Newsletter auf [webseite] angemeldet
Dein Server
###value_name###
###value_email###
###LLL:name### |
###LLL:email### |
newsletter.css
#formhandler_newsletter_form { width: 100%; } #formhandler_newsletter_form .error ul { margin: 0; } .errorField { background-color: #FF0000; } |