<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />vor der Verwendung hinzugefügt werden. Anschließend kann beispielsweise ein Formular einer Login-Maske definiert werden:
<html:form name="AdminLogin" method="post" action="">
<form:placeholder name="LogInError" />
Benutzer: <form:text name="Username" class="eingabe_feld" style="width: 200px; margin-left: 20px;"
validate="true" button="AdminLogin" />
<br />
Passwort: <form:password name="Password" class="eingabe_feld" style="width: 200px; margin-left: 16px;"
validate="true" button="AdminLogin" />
<br />
<br />
<form:button name="AdminLogin" value="Login" class="eingabe_feld" style="margin-left: 227px;"/>
</html:form>
In Prosa: das Formular definiert die Attribute name, damit im Controller später
auf dieses zugegriffen werden kann, method um die Methode des Abschickens zu
definieren und action um die Ziel-URL zu definieren. Letzteres muss in der Template-
Datei nicht zwingend gesetzt werden, da die TagLib dieses selbst mit der aktuellen URL setzt oder
füllt, falls es nicht vorhanden ist.
$Form__AdminLogin = &$this->__getForm('AdminLogin');
$Form__Placeholder_LogInError = &$Form__AdminLogin->getFormElementByName('LogInError');
$Form__Placeholder_LogInError->setPlaceHolder('Login failed!');
if($Form__AdminLogin->get('isValid') && $Form__AdminLogin->get('isSent')){
// Aktion ausführen, die bei abgeschicktem und
// valide ausgefülltem Formular passieren soll...
// end if
}
function transformContent(){
...
// Formular transformieren und in einen Platzhalter einsetzen ...
$this->setPlaceHolder('...',$Form__AdminLogin->tranformForm());
// ... oder das Formular an der Definitionsstelle ausgeben
$Form__AdminLogin->tranformOnPlace();
...
// end function
}
<form:text name="Username" validate="true" button="AdminLogin" />Wichtig ist die Angabe des Button-Namens, da das Formular erst nach dem Abschicken validiert werden soll. Ist das Button-Attribut nicht gesetzt, wird von der TagLib ein Fehler ausgegeben. Zur Ausgabe-Formatierung kann dieser Tag um weitere Attribute wie "class" und style" erweitert werden.
<form:text name="Username" class="eingabe_feld" style="width: 200px; margin-left: 20px;" validate="true" button="AdminLogin" />Ist das Attribut "validator" nicht gesetzt, so wird validiert, ob das Feld > 3 Zeichen enthält.
<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<html:form name="UserEdit" method="post">
<strong>FirstName</strong>:
<form:text name="FirstName" validate="true" button="Edit" />
<br />
<strong>LastName</strong>:
<form:text name="LastName" validate="true" button="Edit" />
<br />
<br />
<form:button name="Edit" value="Save" />
<form:hidden name="userid" />
</html:form>
// Referenz auf das Form-Objekt beziehen
$Form__Edit = &$this->__getForm('UserEdit');
// Referenz auf das Hidden-Feld beziehen und Wert befuellen
$UserID = &$Form__Edit->getFormElementByName('userid');
$UserID->setAttribute('value','...');
// Referenz auf das FirstName-Feld beziehen und Wert befuellen
$FirstName = &$Form__Edit->getFormElementByName('FirstName');
$FirstName->setAttribute('value','...');
// Referenz auf das LastName-Feld beziehen und Wert befuellen
$LastName = &$Form__Edit->getFormElementByName('LastName');
$LastName->setAttribute('value','...');
<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<html:form name="UserCreate" method="post">
<strong>Salutation</strong>:
<form:select name="Salutation" />
<br />
<strong>FirstName</strong>:
<form:text name="FirstName" validate="true" button="Edit" />
<br />
<strong>LastName</strong>:
<form:text name="LastName" validate="true" button="Edit" />
<br />
<br />
<strong>Salutation</strong>:
<br />
<form:multiselect name="Group[]" validate="true" button="Edit" />
<br />
<br />
<form:button name="Edit" value="Save" />
<form:hidden name="userid" />
</html:form>
Wie in der Definition des Multiselect-Feldes Groups[] zu sehen ist, müssen bei
einem Multiselect-Feld die Namen eckigen Klammern versehen werden. Vergisst der Template-Entwickler
dies, wird eine entsprechende Fehlermeldung ausgegeben.
// Referenz auf das Form-Objekt beziehen
$Form__Create = &$this->__getForm('UserCreate');
...
// Referenz auf das Salutation-Feld beziehen und Wert befuellen
$Salutation = &$Form__Create->getFormElementByName('Salutation');
for($i = 0; $i < count($Salutations); $i++){
$Salutation->addOption($Salutations[$i]['Value'],$Salutations[$i]['DisplayName']);
// end for
}
// Referenz auf das Groups[]-Feld beziehen und Werte befuellen
$Group = &$Form__Create->getFormElementByName('Groups[]');
for($i = 0; $i < count($Groups); $i++){
$Group->addOption($Groups[$i]['Value'],$Groups[$i]['DisplayName']);
// end for
}
...
// Referenz auf das Form-Objekt beziehen
$Form__Edit = &$this->__getForm('UserEdit');
// Hidden-Feld auslesen
$UserID = &$Form__Edit->getFormElementByName('userid');
echo $UserID->getAttribute('value');
// FirstName-Feld auslesen
$FirstName = &$Form__Edit->getFormElementByName('FirstName');
echo $FirstName->getAttribute('value');
// LastName-Feld auslesen
$LastName = &$Form__Edit->getFormElementByName('LastName');
echo $LastName->getAttribute('value');
// Referenz auf das Form-Objekt beziehen
$Form__Create = &$this->__getForm('UserCreate');
// Feld Salutation fuellen
$Salutation = &$Form__Create->getFormElementByName('Salutation');
for($i = 0; $i < count($Salutations); $i++){
$Salutation->addOption($Salutations[$i]['Value'],$Salutations[$i]['DisplayName']);
// end for
}
// Salutation auslesen
$Option = &$Salutation->getSelectedOption();
echo $Option->getAttribute('value').', '.$Option->get('Content');
// Feld Group fuellen
$Group = &$Form__Create->getFormElementByName('Groups[]');
for($i = 0; $i < count($Groups); $i++){
$Group->addOption($Groups[$i]['Value'],$Groups[$i]['DisplayName']);
// end for
}
// Gruppen auslesen
$SelectedGroups = &$Group->getSelectedOptions();
for($i = 0; $i < count($SelectedGroups); $i++){
echo $SelectedGroups[$i]->getAttribute('value').', '.$SelectedGroups[$i]->get('Content');
// end for
}
<@controller namespace="..." file="..." class="select_controller" @>
<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<html:form name="type" method="post">
<table>
<tr>
<td>
Please choose the desired form type:
<form:select name="type">
<select:option value="triangle">triangle</select:option>
<select:option value="square">square</select:option>
</form:select>
</td>
<td>
<form:button name="submit" value="send" />
</td>
</tr>
<tr>
<td>
<form:marker name="fields" />
</td>
</tr>
</table>
</html:form>
class select_controller extends baseController
{
// specify form element container
var $__FormElements = array();
function select_controller(){
// define form elements for the triangle
$this->__FormElements['triangle'][] = array('label' => 'coord 1','name' => 'coordone');
$this->__FormElements['triangle'][] = array('label' => 'coord 2','name' => 'coordtwo');
$this->__FormElements['triangle'][] = array('label' => 'coord 3','name' => 'coordthree');
// define form elements for the square
$this->__FormElements['square'][] = array('label' => 'coord 1','name' => 'coordone');
$this->__FormElements['square'][] = array('label' => 'coord 2','name' => 'coordtwo');
$this->__FormElements['square'][] = array('label' => 'coord 3','name' => 'coordthree');
$this->__FormElements['square'][] = array('label' => 'coord 4','name' => 'coordfour');
// end function
}
function transformContent(){
// get form reference
$Form = &$this->__getForm('type');
// get current decision
$Select = &$Form->getFormElementByName('type');
$Option = &$Select->getSelectedOption();
if($Option === null){
$CurrentType = 'triangle';
// end if
}
else{
$CurrentType = $Option->getAttribute('value');
// end else
}
// add form elements
for($i = 0; $i < count($this->__FormElements[$CurrentType]); $i++){
// add label
$Form->addFormContentBeforeMarker('fields',$this->__FormElements[$CurrentType][$i]['label'].': ');
// add text field (name attribute is present to enable validation and presetting!)
$CurrentElementID = $Form->addFormElementBeforeMarker(
'fields',
'form:text',
array('name' => $this->__FormElements[$CurrentType][$i]['name'])
);
// configure further form element attributes
$CurrentElement = &$Form->getFormElementByObjectID($CurrentElementID);
$CurrentElement->setAttribute('style','width: 200px;');
// add a line break
$Form->addFormContentBeforeMarker('fields','<br />');
// end for
}
// display form
$Form->transformOnPlace();
// end function
}
// end class
}
array(
'name' => 'current_name'
)
als drittes Argument mitzugeben. Dies kann unter Umständen auch für die spätere
Adressierung der Objekte über die Methoden getFormElementByName() und
getFormElementByID() von Interesse sein.
| 1 |
Christian
12.11.2008, 19:27:17 |