Zjednodušení šablony formuláře
- cafesk8
- Člen | 103
Zdravím,
jsem v Nette nováček a zkoušel jsem si vytvořit registrační formulář.
Místo defaultního vykreslování formuláře do tabulky chci aby byla
struktura následující:
<form id="regForm">
<fieldset>
<legend>Registrační formulář</legend>
<label for="regForm-user" class="required">Username</label>
<input type="text" id="regForm-user" ...>
<label for="regForm-user" class="error">Vyskytla se chyba</label>
.....
</fieldset>
</form>
Jde mi o validaci při vyplém JS. Pokud nastane chyba, tak aby se zobrazila napravo vedle samotného inputu do labelu.
PRESENTER
<?php
protected function createComponentRegForm($name) {
$regForm = new Form($this,$name);
$regForm->getElementPrototype()->novalidate = 'novalidate';
$regForm->getElementPrototype()->id = 'regForm';
$regForm->addText('user','Uz. jmeno')
->setRequired('Vyplňte prosím své už. jméno')
->addRule(Form::MIN_LENGTH,'Už. jméno musí být alespoň %d znaků dlouhé',4)
->addRule(Form::MAX_LENGTH,'Už. jméno musí být maximálně %d znaků dlouhé',16)
$regForm->addPassword('pass','Heslo:')
->setRequired('Vyplňte prosím své heslo')
->addRule(Form::MIN_LENGTH,'Heslo musí být alespoň %d znaků dlouhé', 8)
->addRule(Form::MAX_LENGTH,'Heslo může být max. %d znaků dlouhé', 16);
....
$regForm->addSubmit('regSubmit','Registrovat');
return $regForm;
}
?>
ŠABLONA
<?php
{control regForm begin}
<fieldset>
<legend>Registrační formulář</legend>
{$control['regForm']['user']->label}
{$control['regForm']['user']->control}
{if $control['regForm']['user']->hasErrors()}
<label for="regForm-user" class="error">
{$control ['regForm']['user']->errors[0]}
</label>
{/if}<br />
{$control['regForm']['pass']->label}
{$control['regForm']['pass']->control}
{if $control['regForm']['pass']->hasErrors()}
<label for="regForm-pass" class="error">
{$control ['regForm']['pass']->errors[0]}
</label>
{/if}<br />
...
{$control['regForm']['regSubmit']->control}
</fieldset>
{control regForm end}
?>
Dle mého názoru musí být jednodušší způsob, hlavně co se šablony týče. Nějaké n:makra nebo tak něco? Poradíte někdo? Díky
Editoval cafesk8 (12. 8. 2011 0:33)
- cafesk8
- Člen | 103
v dokumentaci je pouze část toho, co potřebuji. jsou tam makra {label} a
{input} …
jak v latte vypsat chybu pokud existuje? něco jako
<?php
{form regForm}
<fieldset>
<n:foreach="$form->controls as $name => $field">
// pokud je vše OK
{label}{input}<br />
// pokud je chyba
{label}{input}{error label}<br />
</fieldset>
{/form}
?>
error label si představuji jako
<label for="user" class="error">Text chyby</label>
a né
<label for="user">Popisek inputu</label>.
- cafesk8
- Člen | 103
Díky za radu,
teď si tak říkám, jestli by vůbec chyby měli být v <label>. Na
některých stránkách jsem to tak viděl, ale jestli to pak třeba z hlediska
přístupnosti není zavádějící, jakože label má být ke každému prvku
pouze jeden a ten by měl popisovat jeho funkci. Takže by asi bylo lepší
něco jako:
<span class="error">Text chyby</span>
co myslíte?