TALON4 Framework

Dokumentation

Formulare

Die Klasse TF_View_Form funktioniert als Container für alle Formular-Elemente.

$form->addElement()

Die Funktion "addElement" funktioniert dabei als Factory-Methode und erstellt innerhalb des Formulars eine Instance von TF_View_Form_Element.
Formularelemente könnten daher verändert und umsortiert werden.

$form->render()

... ruft für jedes Formularelement den Formrenderer auf. Standardgemäß ein Objekt der Klasse TF_View_Form_DefaultRenderer.
Formulare können problemlos auch andere Renderer nutzen. Für "neue" Feld-Arten können auch zusätzliche Renderer angemeldet werden.
Talon_Core liefert u.a. ein Eingabefeld für Datumsfelder und Foreign-Key Felder.

$form = TF::Get('TF.View.Form',array('method' => 'post','id' => 'addform'));
$form->addElement("hidden",'hidden_name')->setValue(1);
$form->addElement('text','m_Text',5,'Text');
$form->addElement('Datetime','m_Date','Wiedervorlage ab')->setValue(
TF::Get('TF.Datetime')->setNow()->modify("+1","day")
);
$data = array('A' => 'B','C' => 'D');
$form->addElement('selection','m_User_ID','selection',"Benutzer",$data);

$form->addElement("button","submitbutton","anlegen",'submit');
return $form->render();

Eingabefelder im Defaultrenderer:

$form->addElement("text");

... für ein und mehrzeilige Textfelder

$form->addElement("select");

... für Radio- und Selectboxen.

$form->addElement("hidden");
$form->addElement("checkbox");

Daten setzen

$form->addElement() gibt auch immer das erzeugte Element zurück. Dadurch ist es möglich jedem Element auch einzeln Veränderungen anzugeben.

$e = $form->addElement('text','name',1);
$e->setValue("1234");

Formulargruppen

TF_View_Form_Group kann verwendet werden um Formularfelder zu gruppieren. Dabei arbeitet die Gruppe ähnlich einem normalen Formularelement.,

$group = TF::get('TF.View.Form.Group');
$group->addElement('text','name',1,'Label');
$form->addElement($group);

Codebeispiel:

Der Defaultrenderer erzeugt Beispielsweise folgenden Code:

<div class="frme text fieldname"><label>Text</label>
<textarea name="fieldname" rows="15"></textarea>
</div>

bestehende Formulare ändern

Jedes Formularelement muss einen einzigartigen Namen besitzen, andernfalls werden bestehende Elemente überschrieben.

Der Name kann auch zum Entfernen des Elements genutzt werden.

$e = $form->getElement($name);

 

$form->removeElement($name);

Formularfelder anpassen

Da jedes Formular-Element über TF_View_Form_DefaultDecorator weiter gestaltet wird, kann auch auf dem Rahmen einfluss genommen werden.

 

$e = $form->getElement('name');
$e->set('attr','class','newCssClass');
$e->set('event','onclick','alert(\'test\')');

 

$e->set('decorator','innerwrap',array('<div>','</div>');
$e->set('decorator','wrap',array('<div>','</div>'));

Beispiel:

Das Beispiel geht von einem Routing und Controller-Schema aus, wie es in den Tutorials entsteht.

 

TF::prepare('TF.View');
class MyApp_View_Form extends TF_View
{
public function render($request)
{
$form = TF::Get('TF.View.Form',array('method' => 'post'));
$form->addElement('hidden','view')->setValue('MyApp.Form');
$form->addElement('hidden','action')->setValue('doFormAction');
$form->addElement('text','mytext1','Textfeld');
$form->addelement('button','mysubmit','senden','submit');
$return = $form->render();
return $return;
}

 

public function doFormAction($request)
{
$return = '<pre>'.print_r($_POST,true).'</pre>';
$return .= $this->render($request);
return $return;
}
}