Formuláře: seskupování prvků, fieldset a vlastní renderování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8111
+
0
-

Novinkou revize 63 je schopnost seskupovat prvky formulářů do skupin (zobrazené v HTML třeba jako fieldset) a možnost definovat vlastní vykreslovací funkce.

Seskupování elementů je velmi snadné. Stačí vytvořit skupinu a přidat do ní libovolné elementy:

$form->addGroup('Personal data')
    ->add($form['name'], $form['age'], $form['gender'], $form['email']);

Vlastně je to ještě jednodušší. Po vytvoření nové skupiny se tato stává aktivní a každý nově přidaný prvek je zároveň přidán i do ní. Takže formulář lze stavět tímto způsobem:

$form = new Form;
$form->addGroup('Personal data');
$form->addText('name', 'Your name:');
$form->addText('age', 'Your age:');
$form->addText('email', 'E-Mail:')->emptyValue = '@';

$form->addGroup('Shipping address');
$form->addCheckbox('send', 'Ship to address');
$form->addText('street', 'Street:', 35);
$form->addText('city', 'City:', 35);
$form->addSelect('country', 'Country:', $countries);

Skupina, kterou reprezentuje třída FormGroup, představuje množinu prvků IFormControl bez specifického sémantického významu. Význam jí tedy dodá až například renderovací rutina, která prvky vykreslí seskupené do elementů fieldset a podobně.

Tím se dostáváme k vykreslování.

Nyní je možné si definovat vlastní vykreslovací handler $form->setRenderer($ownRenderer), což je objekt s rozhraním IFormRenderer. Výchozím vykreslovačem je ConventionalRenderer, který není nutné explicitně nastavovat. Ten vykreslí formulář stejným způsobem, jako starší verze.

Důležité upozornění: rozhraní IFormRenderer by mělo být co nejjednodušší a nevynucovat si implementaci metod jako třeba renderBegin(), renderEnd() (ačkoliv právě třída ConventionalRenderer je mít může a také má. Kvůli tomu jsou všechny vykreslovací metody třídy Form zastaralé! Zatím sice fungují, ale jejich volání je doprovázeno varováním.

Form definuje jedinou metodu render() a lze jej nyní vykreslit i konstrukcí echo $form.

AceUnihoc
Člen | 19
+
0
-

Skupiny a vlastni renderovaci funkce NForms posunou zase o kus dal. (Great Work) Pujde nastavit vlastni renderovaci funkce specialne pro samostatnou skupinu ?