Dokumentace
- Aplikace
- Databáze
- Šablony
- Formuláře
- Knihovny
- Návody
Formuláře – renderování
Ruční generování
echo $form->startTag();
echo $form['name']->label;
echo $form['name']->control;
echo $form['name']->error;
echo $form['age']->label;
echo $form['age']->control;
echo $form['age']->error;
echo $form['submit']->control;
echo $form->endTag();
U vstupních prvků FormMultiCheckboxControl a
FormRadioControl se generuje více vstupních prvků naráz. Často
tak můžete potřebovat určit jejich oddělovače. Jak ovýchozí oddělovač
je nastaven řetězec <br />. Oddělovač můžete jednoduše
změnit pomocí členské proměnné $listSeparator. Pokud vám ani
toto nestačí, můžete jednotlivé prvky generovat ručně skrze metodu
getControl.
$form->addMultiCheckbox('multi');
$form['multi']->listSeparator = ' ';
# ===============
foreach ($keys as $key) {
echo $form['multi']->getControl($key);
}
Generování pomocí rendereru
Formulář můžete jednoduše vygenerovat pomocí jeho rendereru. Máte k dispozici předdefinované rendery:
- table – tabulkový,
- div – obalení do div,
- dl – definiční seznam,
- empty – bez obalů.
Jako výchozí je zapnut dl.
# nastavíme renderer
$form->setRenderer('table'); # nebo předáme rovnou objekt
echo $form->renderer->render();
# jednoduseji
echo $form;
Můžete také nechat renderovat formulář po částech. Můžete nechat renderovat následující části:
- start – vygeneruje otevírací tag
- end – vygeneruje ukončovací tag a skryté inputy
- part – vygeneruje jen vybrané vstupní prvky
- pair – vygeneruje pár labelu a controlu
echo $form->renderer->render('start');
# vygenerujeme vstupni prvky username a password
echo $form->renderer->render('part', array('username', 'password'));
# vygeneruje vstupni prvek firstname a da bloku nadpis "Osobni udaje"
echo $form->renderer->render('part', array('firstname'), 'Osobni udaje');
# vygenruje jeden radek formulare - label, control a blok pro chybu
echo $form->renderer->render('pair', 'lastname');
echo $form->renderer->render('end');
Ukázky najdete v archivu v adresáři
/examples/forms/rendering/.
