NAVIGATION
This is an old revision of the document!
translate
Since the release of r282 it is possible to process an own PHP function between the action “submit” and “sending the E-Mail”. This function can read all the form input, modify, and return it. See: PHP function include
In this function, the e-mail address can not be manipulated. If we need this possibility, we have to resort to another method.
A simple script in “template/inc_script/frontend_init/” -folder is processed before the PHP function call from the form.
Processing order:
Docu: –
Forum: –
Author: K.Heermann (flip-flop) (13.07.2010)
CMS-Version: >= V1.4.1 r282
Version: V1.0 13.07.2010
Condition: → /config/phpwcms/conf.inc.php
(In the graph: replace the texte-mail by location).
translate
There are several regions, each is assigned an email address to contact the right person for this region.
The last requirement excludes the use of the form from PHP function because we can not relate in a typical building a response to the selected region. ($postvar['email'] ⇒ test@example.com) if e.g.
[select email menu] Name: email
Bitte wählen -|- Babaorum -|- obelix@lokal.arpa Laudanum -|- obelix@lokal.arpa Kleinbonum -|- asterix@lokal.arpa Aquarium -|- idefix@lokal.arpa
If the user selects one of the first two places e.g. “Laudanum”, an identical e-mail address is returned to us, we do not know which location the user selects. (Obelix is responsible for both places).
Extended Version:
Bitte wählen -|- Babaorum -|- <Babaorum>obelix@lokal.arpa Laudanum -|- <Laudanum>obelix@lokal.arpa Kleinbonum -|- <Kleinbonum>asterix@lokal.arpa Aquarium -|- <Aquarium>idefix@lokal.arpa
The form PHP function would provide in “$postvar['email'] ⇒ obelix@lokal.arpa”, thus also here no localisation would be possible. (<Laudanum> is filtered by the form Script).
The variable “$_POST['email']” in an frontend_init-Script supplies against it e.g. ” obelix@lokal.arpa”. We can determine the place.
To fix the location in the output text, we place a hidden field “location” with the word “nix” (nothing) into the form. This field can also be used to identify the form, the frontend_init script is executed on every page request!
Z.B.
if(isset($_POST['email']) AND $_POST['email'] == 'nix') { ...
So kann das Formular zumindest rudimentär identifiziert werden. Dies kann bei mehreren Formularen in der Site wichtig sein.
Der letzte Schritt ist die Filterung des Ortes und Zuweisung zur Variablen “$_POST['ort']”.
Das ist mit einem einfachen preg_replace möglich, je nach Gusto.
form_script_email_to_location.php
<?php /** ********************************************************************************************* * 13.07.2010 KH: http://planmatrix.de * frontend_init-Script: Manipulating the e-mail address * - Determining the location and email address in form ********************************************************************************************* */ // ------------------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ------------------------------------------------------------------------------------------- if( isset($_POST['ort']) AND $_POST['ort'] == 'nix' ) // The right form? { $email = trim($_POST['email']); $_POST['ort'] = preg_replace('/\<(.*)\>(.*)/is','$1', $email); // Cutting out the location $_POST['email'] = preg_replace('/\<(.*)\>(.*)/is','$2', $email); //Only for completeness. Is not necessarily needed } // ---- END if( $_POST['ort'] ?>
In der Formular PHP-Funktion wird in der Variablen “$postvar['ort'] der Text “Laudanum” stehen und somit auch in den Text der Ausgangs-eMail im Platzhalter ”{ort}” übernommen.
[E-Mail Aufklappmenü] Name: email
Bitte wählen -|- Babaorum -|- <Babaorum>obelix@lokal.arpa Laudanum -|- <Laudanum>obelix@lokal.arpa Kleinbonum -|- <Kleinbonum>asterix@lokal.arpa Aquarium -|- <Aquarium>idefix@lokal.arpa
Empfängervorlage:
Hallo {anrede} {name}, E-Mail: {email} Ort: {ort} Kommentar: ------------------------------ {kommentar} ------------------------------ Das war alles - Danke.
Vorlage:
<!--form-spezial//--> <div style="width:500px; margin: 0; padding:10px; border:1px solid #bbb; background: #C2E7EF;"> {ERROR:anrede}[B]{LABEL:anrede}[/B] *[BR]{anrede}[BR][BR] {ERROR:name}[B]{LABEL:name}[/B] *[BR]{name}[BR][BR] {ERROR:email}[B]{LABEL:email}[/B] *[BR]{email}[BR][BR] {ERROR:kommentar}[B]{LABEL:kommentar}[/B][BR]{kommentar}[BR][BR] {ERROR:nospam}[B]{LABEL:nospam}[/B] *[BR]{nospam}[BR][BR] {submitIt} </div>