/config/tools/form/taglib/{CONTEXT}/{ENVIRONMENT}_formconfig.ini
erwartet. {CONTEXT} ist dabei der Context der aktuellen Applikation und {ENVIRONMENT}
ist gegen den Wert der Umgebungsvariable der Registry zu ersetzen. Im Fall der vorliegenden
Dokumentationsseite wird die Datei unter
/config/tools/form/taglib/sites/demosite/DEFAULT_formconfig.inierwartet. Wie im Kapitel Standard-TagLibs unter 2.3.16 und 2.3.17 zu lesen ist, können jedem der genannten Tags die optionalen Attribute
Bitte geben Sie eine E-Mail-Adresse sein!erscheinen, wenn das Feld nicht gefüllt wurde und
Bitte geben Sie eine gültige E-Mail-Adresse sein!wenn das Feld nicht mit einer syntaktisch richtigen E-Mail-Adresse gefüllt wurde, dann kann für dieses Feld innerhalb eines Formulars wie folgt ein Validator-Tag definiert werden:
<form:validate
button="send"
field="email"
type="EMail"
msginputreq="Contact.EMail.InputRequired"
msginputwrg="Contact.EMail.InputWrong"
/>
Das Attribut button definiert dabei den Namen des Button, der die Validierung
auslösen soll, das Attribut field das zu validierende Feld und
type den Validator-Typ. Die Inhalte der Attribute msginputreq und
msginputwrg wurden in diesem Fall mit dem Prefix "Contact.EMail."
versehen um die Zugehörigkeit zur Applikation Kontaktformular und zum Feld
E-Mail kenntlich zu machen. Diese Konvention hat sich eingebürgert, um schnell
erkennen zu können, welcher Konfigurationsschlüssel zu welcher Applikation gehört.
Des Weiteren ist es ratsam, die Konfigurationsdateien zu kommentieren.
[de] Contact.EMail.InputRequired = "Bitte geben Sie eine E-Mail-Adresse sein!" Contact.EMail.InputWrong = "Bitte geben Sie eine gültige E-Mail-Adresse sein!" [en] Contact.EMail.InputRequired = "Please fill the field sender name!" Contact.EMail.InputWrong = "Please provide a valid email address!"
/config/modules/kontakt4/{CONTEXT}/{ENVIRONMENT}_language.ini
Diese wird mit folgenden Werten gefüllt:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Language file for the contact form module ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [de] ; header header.title = "Kontakt" ; hints on the form formhint.text = "Wenn Sie mit mir in Kontakt treten möchten, dann benutzen Sie einfach dieses Formular. Geben Sie Ihre Nachricht ein und schon kann es los gehen. Ich werden mich dann umgehend mit Ihnen in Verbindung setzten. Bitte füllen Sie das Formular vollständig aus!" ; form labels form.person = "Person / Gruppe: " form.person.margin = "24" form.name = "Ihr Name:" form.name.margin = "65" form.email = "Ihre E-Mail-Adresse:" form.email.margin = "9" form.subject = "Ihr Betreff:" form.subject.margin = "65" form.comment = "Ihre Nachricht:" form.button = "Senden" form.button.style = "margin-left: 335px;" form.captcha = "Bestätigungscode:" ; confirmation text message.text = "Vielen Danke für Ihre Anfrage. Ich werde mich umgehend mit Ihnen in Verbindung setzen!" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [en] ; header header.title = "Contact" ; hints on the form formhint.text = "If you want to contact me, please use the form provided below. Then I will immediately get in contact with you. Please fill all required fields!" ; form labels form.person = "Person / group: " form.person.margin = "33" form.name = "Your name:" form.name.margin = "57" form.email = "Your email address:" form.email.margin = "9" form.subject = "Your subject:" form.subject.margin = "49" form.comment = "Your message:" form.button = "Send" form.button.style = "margin-left: 350px;" form.captcha = "Security code:" ; confirmation text message.text = "Many thanks for your message. I will get in contact with you immediately!"Die Werte können damit z.B. per
// Sprachabhängige Konfiguration laden
$Config = &$this->__getConfiguration('modules::kontakt4','language');
// Referenz auf das Button-Control holen
$Button = &$Form->getFormElementByName('KontaktSenden');
// Sprachabhängigen Text mit Hilfe von $this->__Language auslesen
$Button->setAttribute('value',$Config->getValue($this->__Language,'form.button'));
/modules/
kontakt4/
biz/
data/
pres/
documentcontroller/
templates/
Der Ordner biz dient der Ablage der Business-Komponenten (je ein Domain-Objekt
für die Daten des Formulars und die Empfänger), im Ordner data ist der
Mapper beheimatet, der die Empfänger einliest und der Ordner pres dient zur
Ablage der Controller- und Template-Dateien der Präsentationsschicht. Im Ganzen betrachtet soll
das Kontaktformular aus den folgenden Dateien bestehen:
<core:addtaglib namespace="tools::html::taglib" prefix="html" class="getstring" /> <font style="font-size: 26px; font weight: bold;"><html:getstring namespace="modules::kontakt4" config="language" entry="header.title" /></font> <br /> <br /> <core:importdesign namespace="modules::kontakt4::pres::templates" template="[pagepart=formular]" />Hinweis: Im Template wird das <core:importdesign />-Tag mit der pagepart-Option benutzt. Dies bedeutet, dass je nach URL-Parameter pagepart ein anderes Template aus den angegebenen Namespace eingebunden wird. Ist kein Parameter in der URL vorhanden wird die im Attribut template angegebene Templatedatei - das Formular - eingebunden.
<@controller namespace="modules::kontakt4::pres::documentcontroller" file="kontakt_v4_controller" class="kontakt_v4_controller" @>
<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<core:addtaglib namespace="tools::html::taglib" prefix="html" class="getstring" />
<html:getstring namespace="modules::kontakt4" config="language" entry="formhint.text" />
<br />
<div style="text-align: left; padding-left: 80px; font-size: 12px;">
<html:placeholder name="Inhalt" />
</div>
<html:form name="Kontakt" method="post">
<form:valgroup name="FormValGroup">
<br />
<div style="width: 400px; border: 1px solid red; padding: 5px;">
<img src="<valgroup:placeholder name="WarnImage" />" /> <font style="font-size: 13px; font-weight: bold;"><valgroup:placeholder name="WarnText" />:</font>
<br />
<valgroup:validate type="text" field="AbsenderName" button="KontaktSenden" msginputreq="Contact.Sender.InputRequired" />
<valgroup:validate type="text" field="AbsenderAdresse" button="KontaktSenden" msginputreq="Contact.EMail.InputRequired" msginputwrg="Contact.EMail.InputWrong" validator="EMail" />
<valgroup:validate type="text" field="Betreff" button="KontaktSenden" msginputreq="Contact.Subject.InputRequired" />
<valgroup:validate type="text" field="Text" button="KontaktSenden" msginputreq="Contact.Text.InputRequired" />
</div>
<br />
</form:valgroup>
<br />
<span style="margin-right: <form:getstring namespace="modules::kontakt4" config="language" entry="form.person.margin" />px;"><form:getstring namespace="modules::kontakt4" config="language" entry="form.person" /></span><form:select name="Empfaenger" class="eingabe_feld" />
<br />
<br />
<span style="margin-right: <form:getstring namespace="modules::kontakt4" config="language" entry="form.name.margin" />px;"><form:getstring namespace="modules::kontakt4" config="language" entry="form.name" /></span><form:text name="AbsenderName" class="eingabe_feld" style="width: 280px;" validate="true" button="KontaktSenden" />
<br />
<br />
<span style="margin-right: <form:getstring namespace="modules::kontakt4" config="language" entry="form.email.margin" />px;"><form:getstring namespace="modules::kontakt4" config="language" entry="form.email" /></span><form:text name="AbsenderAdresse" class="eingabe_feld" style="width: 280px;" validate="true" validator="EMail" button="KontaktSenden" />
<br />
<br />
<span style="margin-right: <form:getstring namespace="modules::kontakt4" config="language" entry="form.subject.margin" />px;"><form:getstring namespace="modules::kontakt4" config="language" entry="form.subject" /></span><form:text name="Betreff" class="eingabe_feld" style="width: 280px;" validate="true" button="KontaktSenden" />
<br />
<br />
<form:getstring namespace="modules::kontakt4" config="language" entry="form.comment" />
<br />
<form:area name="Text" class="eingabe_feld" style="height: 200px; width: 400px; overflow: auto;" validate="true" button="KontaktSenden" />
<br />
<br />
<form:getstring namespace="modules::kontakt4" config="language" entry="form.captcha" />
<br />
<br />
<form:addtaglib namespace="modules::captcha::pres::taglib" prefix="form" class="captcha" />
<form:captcha text_class="eingabe_feld" validate="true" button="KontaktSenden"/>
<br />
<br />
<form:button name="KontaktSenden" class="eingabe_feld" />
</html:form>
<br /> <core:addtaglib namespace="tools::html::taglib" prefix="html" class="getstring" /> <html:getstring namespace="modules::kontakt4" config="language" entry="message.text" /> <br /> <br />
import('tools::variablen','variablenHandler');
import('modules::kontakt4::biz','contactManager');
class kontakt_v4_controller extends baseController
{
var $_LOCALS;
function kontakt_v4_controller(){
$this->_LOCALS = variablenHandler::registerLocal(array('Empfaenger',
'AbsenderName',
'AbsenderAdresse',
'Betreff',
'Text'
)
);
// end function
}
function transformContent(){
// Referenz auf die Form holen
$Form = &$this->__getForm('Kontakt');
if($Form->get('isValid') && $Form->get('isSent')){
// Was wird gesendet?
//
// - Kontakt-Person-ID (Empf?nger-Person der Mail)
// - Name
// - E-Mail
// - Betreff
// - Text
$oFD = new oFormData();
$oFD->set('RecipientID',$this->_LOCALS['Empfaenger']);
$oFD->set('SenderName',$this->_LOCALS['AbsenderName']);
$oFD->set('SenderEMail',$this->_LOCALS['AbsenderAdresse']);
$oFD->set('Subject',$this->_LOCALS['Betreff']);
$oFD->set('Text',$this->_LOCALS['Text']);
// Formular absenden
$cM = &$this->__getServiceObject('modules::kontakt4::biz','contactManager');
$cM->sendContactForm($oFD);
// end if
}
else{
$this->setPlaceHolder('Inhalt',$this->__buildForm());
// end else
}
// end function
}
function __buildForm(){
// Referenz auf die Form holen
$Form__Kontakt = &$this->__getForm('Kontakt');
// Action setzen
$Form__Kontakt->setAttribute('action',$_SERVER['REQUEST_URI']);
// Button beschriften und formatieren
$Config = &$this->__getConfiguration('modules::kontakt4','language');
$Button = &$Form__Kontakt->getFormElementByName('KontaktSenden');
$Button->setAttribute('value',$Config->getValue($this->__Language,'form.button'));
$Button->setAttribute('style',$Config->getValue($this->__Language,'form.button.style'));
// Bild in der ValidatorGroup setzen (Auslesen der formconfig)
$Config = &$this->__getConfiguration('tools::form::taglib','formconfig');
$ValGroup = &$Form__Kontakt->getFormElementByName('FormValGroup');
$ValGroup->setPlaceHolder('WarnImage',$Config->getValue($this->__Language,'Contact.Warning.Image'));
$ValGroup->setPlaceHolder('WarnText',$Config->getValue($this->__Language,'Contact.Warning.Text'));
// Auswahlfeld Person
$Recipients = & $Form__Kontakt->getFormElementByName('Empfaenger');
// RecipientList laden
$cM = &$this->__getServiceObject('modules::kontakt4::biz','contactManager');
$RecipientList = $cM->loadRecipients();
for($i = 0; $i < count($RecipientList); $i++){
$Recipients->addOption($RecipientList[$i]->get('Name'),$RecipientList[$i]->get('oID'));
// end if
}
// Formular transformieren und zur?ckgeben
return $Form__Kontakt->transformForm();
// end function
}
// end class
}
/config/tools/form/taglib/{CONTEXT}/{ENVIRONMENT}_formconfig.ini
unter der Sektion [de] (für deutsche Sprache) und dem Schlüssel
Contact.Warning.ImageUm einen sprachabhängigen Wert aus der Konfiguration zu lesen wird die Sektion über die interne Membervariable $this->__Language gesteuert, die je nach gewählter Sprache den entsprechenden zweistelligen ISO-Ländercode beinhaltet, der als Titel für die Sprachsektion in der Konfigurationsdatei gewählt wurde. Im vorliegenden DocumentController wird das Füllen der beiden Platzhalter per
$Config = &$this->__getConfiguration('tools::form::taglib','formconfig');
$ValGroup = &$Form__Kontakt->getFormElementByName('FormValGroup');
$ValGroup->setPlaceHolder('WarnImage',$Config->getValue($this->__Language,'Contact.Warning.Image'));
$ValGroup->setPlaceHolder('WarnText',$Config->getValue($this->__Language,'Contact.Warning.Text'));
import('modules::kontakt4::biz','oFormData');
import('modules::kontakt4::biz','oRecipient');
import('modules::kontakt4::data','contactMapper');
import('tools::mail','mailSender');
import('tools::link','linkHandler');
class contactManager extends coreObject
{
function contactManager(){
}
function sendContactForm($oFD){
// contactMapper holen
$cM = &$this->__getServiceObject('modules::kontakt4::data','contactMapper');
// E-Mail fuer Empfaenger aufsetzen
$MAIL = &$this->__getAndInitServiceObject('tools::mail','mailSender','Kontaktformular');
// Empfaenger setzen
$Recipient = $cM->loadRecipientPerId($oFD->get('RecipientID'));
$MAIL->setRecipient($Recipient->get('Adresse'),$Recipient->get('Name'));
// Text einsetzen
$Text = 'Sehr geehrter Empf?nger, sehr geehrte Empf?ngerin,';
$Text .= "\n\n";
$Text .= $oFD->get('SenderName').' (E-Mail: '.$oFD->get('SenderEMail').') hat Ihnen folgende Nachricht ?ber das Kontaktformular zukommen lassen:';
$Text .= "\n\n\n";
$Text .= $oFD->get('Text');
$MAIL->setContent($Text);
// Betreff setzen
$MAIL->setSubject($oFD->get('Subject'));
// Mail senden
$MAIL->sendMail();
// E-Mail fuer Absender aufsetzen
$MAIL->clearRecipients();
$MAIL->clearCCRecipients();
$MAIL->clearContent();
// Empfaenger setzen
$MAIL->setRecipient($oFD->get('SenderEMail'),$oFD->get('SenderName'));
// Text einsetzen
$Text = 'Sehr geehrter Empf?nger, sehr geehrte Empf?ngerin,';
$Text .= "\n\n";
$Text .= 'Ihre Anfrage wurde an die Kontaktperson "'.$Recipient->get('Name').'" weitergeleitet. Wir setzen uns baldm?glich mit Ihnen in Verbindung!';
$Text .= "\n\n";
$Text .= 'Hier nochmals Ihr Anfragetext:';
$Text .= "\n";
$Text .= $oFD->get('Text');
$MAIL->setContent($Text);
// Betreff setzen
$MAIL->setSubject($oFD->get('Subject'));
// Mail senden
$MAIL->sendMail();
// Bestaetigungsseite anzeigen
$Link = linkHandler::generateLink($_SERVER['REQUEST_URI'],array('pagepart' => 'meldung'));
$Reg = &Singleton::getInstance('Registry');
$URLRewriting = $Reg->retrieve('apf::core','URLRewriting');
if($URLRewriting != true){
$Link = str_replace('&','&',$Link);
// end if
}
header('Location: '.$Link);
// end function
}
function loadRecipients(){
$cM = & $this->__getServiceObject('modules::kontakt4::data','contactMapper');
return $cM->loadRecipients();
// end function
}
// end class
}
import('modules::kontakt4::biz','oFormData');
import('modules::kontakt4::biz','oRecipient');
class contactMapper extends coreObject
{
function contactMapper(){
}
function loadRecipients(){
// read config
$Config = $this->__getConfiguration('modules::kontakt4','empfaenger');
// read relevant section
$Sections = $Config->getConfiguration();
// initialize return array
$Recipients = array();
// parse config and generate recipients
foreach($Config->getConfiguration() as $Key => $Values){
$Count = count($Recipients);
$Recipients[$Count] = new oRecipient();
// id
preg_match("/Kontakt ([0-9]+)/i",$Key,$Matches);
$Recipients[$Count]->set('oID',$Matches[1]);
// name
$Recipients[$Count]->set('Name',$Values['EmpfaengerName']);
// email
$Recipients[$Count]->set('Adresse',$Values['EmpfaengerAdresse']);
// end foreach
}
// return recipient list
return $Recipients;
// end function
}
function loadRecipientPerId($Id){
$Rec = $this->loadRecipients();
if(!is_array($Rec)){
return array();
// end if
}
else{
for($i = 0; $i < count($Rec); $i++){
if($Rec[$i]->get('oID') == $Id){
return $Rec[$i];
// end if
}
// end for
}
// end else
}
// end function
}
// end class
}
[Kontakt ([0-9]+)] EmpfaengerName = "([A-Za-z0-9,.-_ ]+)" EmpfaengerAdresse = "([A-Za-z0-9.-_@]+)"aufgebaut. Die Methode loadRecipients() mappt dabei jede Sektion in ein Domain-Objekt (oRecipient) und liefert eine Liste dieser zurück. Jeder Empfänger kann beim Versenden des Formulars an Hand seiner eindeutigen ID (siehe Sektionsnamen) referenziert und per loadRecipientById() geladen werden.
| 1 |
Christian
12.10.2008, 23:12:17 |
| 2 |
Reiner Rottmann
18.08.2008, 14:32:39 |