Formhandler mit wechselnden auswählbaren Empfänger-Adressen in einem Dropdown. Formhandler: Empfänger auswählen?

Freitag, 01. Juni 2012

Typische Herausforderung: Man hat mit der Typo3 Extension Formhandler ein Formular erstellt, bei dem der Besucher der Webseite aus einem Dropdown verschiedene Empfänger auswählen kann. Die Empfänger selbst sollen aus einer Datenbank-Tabelle kommen. Das Dropdown wird dynamisch befüllt.

Schauen wir uns zunächst die Anpassungen im Template an. Dort wo später das Dropdown erscheinen soll, wurde der Marker “recipient_options” eingefügt:

<form id="mailform" method="post" action="###REL_URL###" enctype="multipart/form-data">
   <input type="hidden" name="formhandler[submitted]" value="1" />
   ###recipient_options###
   ....
</form>

Der Marker wird über das Setup für Formhandler definiert. In diesem Fall hatte ich eine kleine Extension dazu geschrieben, damit der Redakteur die Empfänger selbst im Backend eintragen und ändern kann. Die Extension liest aus ihrer Tabelle “tx_mailrecipients” alle Einträge und generiert daraus die option-Tags für das Dropdown. Der HTML-Code, der aus der Extension zurück kommt hat als value immer die uid des Eintrags in der Datenbank.

<option value="1">Verwaltung</option>
<option value="2">Küchenchef</option>
<option value="3">Bürgermeister</option>

Um das Ganze flexibel zu halten übergebe ich die PID des SysFolders mit den Empfänger-Einträgen auch dynamisch (hier die PID 244). Das Ganze wird dann mit dem Select-Tag und der Variable formhandler[recipientID] gewrappt:

plugin.Tx_Formhandler.settings.predef.contactform.markers {
   recipient_options = COA
   recipient_options {
      10 = TEXT
      10 {
         postUserFunc = tx_mailrecipients_pi1->get_recipient_options
         postUserFunc.recipient_options_pid = 244
      }
      stdWrap.wrap = <select name="formhandler[recipientID]" id="empfaenger">|</select>
      stdWrap.required = 1	
   }
}

In den Tx_Formhandler_Finisher_Mail Einstellung für admin.to_email verwende ich dann die zurückgegebene recipientID zur Abfrage der Spalte “email” in der Tabelle tx_mailrecipients. Hier habe ich zusätzlich ein Fallback eingebaut, falls keine E-Mail gefunden wurde.

...
admin {
   to_email = TEXT
   to_email {
      data = DB:tx_mailrecipients:{GP:formhandler|recipientID}:email
      data.insertData = 1
      stdWrap.ifEmpty.cObject = TEXT
      stdWrap.ifEmpty.cObject.dataWrap = default@email.de
   }
   ...			
}

Genauso hätte hier eine andere Extension zum Einsatz kommen können – z.B. tt_address.

Kleine Anmerkung zu dem “Umweg” über die uid der Datenbank: Im Internet habe ich viele Beispiele gefunden, in denen als value direkt die E-Mail-Adressen angegeben wurden. Davon würde ich dringend abraten: Spam-Bots könnten die Adressen erfassen und – viel schlimmer – das Formular wäre unsicher, weil man durch eine Manipulation der GET/POST-Variablen die Mail an einen beliebigen Empfänger schicken könnte – ein gefundenes Fressen für Spammer!

Und mal wieder für die Suchmaschinen ein paar Begriffe: “Formhandler – Empfänger Email per Selectbox auswählen”, Formhandler Adressen dynamisch, Formhandler admin.email_to Dropdown Selectbox wählen, Dropdown mit Empfängern im Formular, Empfänger-Auswahl Formhandler, Empfänger Select-Box Combobox. Formhandler: Empfänger auswählen? Formhandler: mehrere Empfänger. Mehrere Empfänger in Formhandler auswählen. E-Mail an mehrere Empfänger versenden. E-Mail an mehrere Empfänger auswählen über Dropdown Combobox Selectbox Optionbox Formhandler. Formhandler multiple recipients. Multiple Empfänger. “formhandler: Dropdown mit Email Adresse”. Formhandler Emailempfänger in dropdown auswählen. Email form to selection from drop-down.