Zjednodušení šablony formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
cafesk8
Člen | 103
+
0
-

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)

voda
Člen | 561
+
0
-

Je to v dokumentaci.

cafesk8
Člen | 103
+
0
-

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>.
voda
Člen | 561
+
0
-

Pro výpis chyb žádná makra nejsou, takže nejlépe si napsat vlastní.

cafesk8
Člen | 103
+
0
-

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?

22
Člen | 1478
+
0
-

řek bych spíš <ul> pro připad, že je chyb více.