Fast auf jeder Webseite finden sich E-Mail Adressen, die mit mailto: verlinkt sind. Diese Links setzen aber voraus, dass der Besucher auch ein Mailprogramm installiert hat. Ansonsten muss er sich die Adresse manuell kopieren und in einen Webmailer einsetzen. Ich möchte heute einen anderen Weg zeigen, wie man das mit Hilfe eines Formulars komfortabler gestalten kann, so dass auch jeder Redakteur einfach auf das Kontaktformular verlinken kann und dabei auch gleich den Empfänger vorbelegt.
Folgende Zutaten brauchen wir dafür:
- Extension powermail
- Extension link handler
- ein wenig TypoScript
- optional die Extension RealURL
Teil 1: Formular mit dynamischer Empfängerliste einrichten
Mit powermail wird ein Formular erstellt. Für die Empfänger wird ein extra Feld vom Typ „TypoScript-Objekt hinzufügen“ erstellt und als TypoScript-Objekt zum Beispiel lib.dynamic-recipient angegeben.
Als nächstes braucht es etwas TypoScript, um eine Dropdown Liste mit den Empfängern im Frontend zu erzeugen.
Konstanten:
# PID des Ordners mit den fe_user Daten fe_userPid = 27 # UID des powermail Empfänger Feldes mit dem TypoScript Objekt formFieldUid = 8 # Label des Formular Feldes im Frontend formFieldLabel = Empfänger # Session Feld, in dem die Auswahl aus dem Frontend gespeichert ist formSesValue = TSFE:fe_user|sesData|powermail_37|uid8 |
Setup:
lib.dynamic-recipient = COA lib.dynamic-recipient { 10 = CONTENT 10 { # Tabelle fe_users abfragen und alle Einträge holen, die Name und E-Mail Adresse haben table = fe_users select { selectField = uid, name where = name != '' AND email != '' pidInList = {$fe_userPid} orderBy = username } # Dropdown Liste im Frontend rendern renderObj = COA renderObj { 10 = TEXT 10 { field = uid wrap = >option value="|" } 15 = TEXT 15 { value = selected="selected" noTrimWrap = | || if { value.data = {$formSesValue} equals.field = uid } } 20 < .10 20 { field = name wrap = >| } } wrap = <div id="powermaildiv_uid{$formFieldUid}" class="tx_powermail_pi1_fieldwrap_html tx_powermail_pi1_fieldwrap_html_select tx_powermail_pi1_fieldwrap_html_{$formFieldUid} odd"> <label for="uid{$formFieldUid}">Empfänger</label> <select id="uid{$formFieldUid}" class="powermail_kontakt powermail_select powermail_uid{$formFieldUid} validation-passed" name="tx_powermail_pi1[uid{$formFieldUid}]"> <option>--- bitte Empfänger auswählen ---</option> </select></div> insertData = 1 } } |
Außerdem braucht es noch etwas TypoScript für powermail, damit geprüft wird, ob auch ein Empfänger ausgewählt wurde und damit in der erzeugten Mail dann auch der Empfänger mit Namen und nicht über die UID angezeigt wird. Außerdem muss natürlich auch noch die Empfänger Adresse in der Mail gesetzt werden:
plugin.tx_powermail_pi1 { # überprüfen, ob ein Empfänger ausgewählt wurde validate.uid8 { required = 1 errormsg = Bitte einen Empfänger aus der Liste auswählen! } # powermail soll statt der UID den Namen anzeigen mode { confirmation { uid8 = CONTENT uid8 { table = fe_users select { selectField = name pidInList = {$fe_userPid} where = deleted=0 andWhere.data = {$formSesValue} andWhere.wrap = uid=| andWhere.intval = 1 } renderObj = COA renderObj { 10 = TEXT 10 { field = name } } } } thx < .confirmation recipient_mail < .confirmation sender_mail < .confirmation } # Empfänger der Mail ist der ausgewählte fe_user email.recipient_mail { email_query = TEXT email_query.value = SELECT email FROM fe_users WHERE uid = ###UID8### } } |
Das Empfänger Feld in powermail bleibt dann leer, da der Empfänger dynamisch über email.recipient_mail gesetzt wird:
Fertig sieht das Formular dann so aus:
Teil 2: Einfache Verlinkung über den Linkbrowser in TYPO3
Jetzt soll es natürlich für Redakteure leicht möglich sein, auf das Kontaktformular zu verlinken und dabei auch gleich einen Empfänger vorzubelegen.
Die Extension linkhandler ermöglicht es im TYPO3 Backend, auf beliebige Datensätze zu verlinken.
Damit das für unser Formular funktioniert, muss folgender Code in das TSconfig Feld der Root Seite eingetragen werden:
RTE.default.tx_linkhandler { tt_news > fe_users { label = Kontaktformular listTables = fe_users # PID des SysOrdners mit den fe_user Daten onlyPids = 27 } } mod.tx_linkhandler { tt_news > fe_users { label = Kontaktformular listTables = fe_users # PID des SysOrdners mit den fe_user Daten onlyPids = 27 } } |
Für das Frontend brauchen wir noch dieses TypoScript:
plugin.tx_linkhandler { fe_users { # Seite mit dem Kontaktformular parameter = 2 # weitere Parameter # wichtig ist die richtige uid des powermail Empfängerfeldes additionalParams = &tx_powermail_pi1[uid8]={field:uid} additionalParams.insertData = 1 useCacheHash = 1 title = E-Mail an {field:name} title.insertData = 1 } } |
Im RTE oder an anderen Stellen mit Linkbrowser taucht jetzt der neue Tab „Kontaktformular“ auf.
Um die erzeugten Links jetzt noch perfekt zu machen, kann optional noch diese RealURL Konfiguration in den Bereich postVarSets eingefügt werden:
'postVarSets' => array( '_DEFAULT' => array( 'empfaenger' => array( array( // uid des powermail Empfänger Feldes 'GETvar' => 'tx_powermail_pi1[uid8]', 'lookUpTable' => array( 'table' => 'fe_users', 'id_field' => 'uid', 'alias_field' => 'name', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => array( 'strtolower' => 1, 'spaceCharacter' => '-', ), ), ), ), ), ), |
Fazit:
Durch die geschickte Kombination meherer Extenxions kann man viel erreichen, ohne eine eigene Extension dafür schreiben zu müssen.
Viel Spaß beim Ausprobieren! Feedback über die Kommentare ist natürlich immer gerne gesehen.
Edit:
Da der Quelltext Parser in WordPress wohl etwas buggy ist, habe ich jetzt alle Code Schnippsel zu twitcode.org ausgelagert (was übrigens mit FLOW3 realisiert wurde!):
Konstanten: http://twitcode.org/show/197/dynamic-recipient-constants
Setup: http://twitcode.org/show/198/dynamic-recipient-setup
Powermail: http://twitcode.org/show/199/dynamic-recipient-powermail
Page TS für Linkhandler: http://twitcode.org/show/200/dynamic-recipient-page-ts
Plugin Linkhandler: http://twitcode.org/show/201/dynamic-recipient-linkhandler
RealURL Konfiguration: http://twitcode.org/show/202/dynamic-recipient-realurl