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/.