Chybějící fieldset v komponentě

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

Ahoj,

využívám výchozí šablonu form.latte, která je přibalena v Nette.
Vesměs mi v ní nic nechybí, ale teď jsem narazil na problém, kdy potřebuji využít „toggle“ pro skrývání prvků a to mi nefunguje tak, jak bych chtěl.

Takhle vypadá šablona form.latte:

<form n:name=$form>
    <ul class=error n:if="$form->ownErrors">
	<li n:foreach="$form->ownErrors as $error">{$error}</li>
    </ul>

<table id="loginform">
<tr n:foreach="$form->controls as $input" n:class="$input->required ? required">
	<th>{label $input /}</th>
	<td>{input $input} <span class=error n:ifcontent>{$input->error}</span></td>
</tr>
</table>
</form>

Jak do ní mohu zakomponovat třeba fieldsety?

Potřebuji, aby mi skupina „firma“ v případě zvolení „Osoba“ zmizela (je to jen kus kódu, bez nějakých dalších ošetření):

		$form = new Form;

$form->addGroup('Osoba')
        ->setOption('container', 'fieldset id=osoba');
$form->addRadioList('switch', NULL, array('osoba' => 'Osoba', 'firma' => 'Firma'))
     ->setDefaultValue('osoba')
     ->addCondition(\Nette\Application\UI\Form::EQUAL, 'osoba')
         ->toggle('firma', FALSE);
$form->addText('jmeno', 'Jméno:');
$form->addText('prijmeni', 'Příjmení:');
$form->addText('ulice', 'Ulice:');
$form->addText('cislo_popisne', 'Číslo popisné:');
$form->addText('mesto', 'Město:');
$form->addText('psc', 'PSČ:');
$form->addText('patro', 'Patro:');
$form->addText('telefon', 'Telefon:');
$form->addText('email', 'E-Mail:');

$form->addGroup('Firma')
        ->setOption('container', 'fieldset id=firma');
$form->addText('nazev', 'Firma:');
$form->addText('ic', 'IČ:');
$form->addText('dic', 'DIČ:');

Děkuji za rady, Google mi moc nepomáhá :-(

P.S.: Jediné, co se mi povedlo bylo skrýt prvky s id frm-novyZakaznikForm-něco, ale to zmizel jen daný input, nikoliv celý řádek (element tr).

AlesMenzel
Člen | 13
+
+1
-

Pomocí $form->getGroups(), popř $form->getGroup(…) dostaneš fieldsety, které jsou ControlGroup objekty, jež mají metodu ->getControls()

Takže bych to viděl asi takhle:

...
<table id="loginform">

{if !empty($form->getGroups())}
<tr n:foreach="$form->getGroups() as $group">
	<td>
		<fieldset>
			<legend>{$group->getOption("label")}</legend>
			<table>
				<tr n:foreach="$group->getControls() as $input" n:class="$input->required ? required">
    				<th>{label $input /}</th>
   					<td>{input $input} <span class=error n:ifcontent>{$input->error}</span></td>
				</tr>
			</table>
		</fieldset>
	</td>
</tr>
{else}
	// pokud nejsou nastaveny fieldsety, vypiš pouze controly ($form->getControls())
{/if}

</table>
dj.kure
Člen | 70
+
0
-

Děkuju, samozřejmě pomohlo :-)

Edit:
Ještě doplním, že jsem musel upravit první if z:

{if !empty($form->getGroups())}

na:

{if $form->getGroups()}

Protože jinak mi web házel v případě že formulář skupiny neměl, následující chybu:

Latte\Engine.php(219) : eval()'d code:30

Editoval dj.kure (4. 2. 2016 12:09)