Chybějící fieldset v komponentě
- dj.kure
- Člen | 70
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
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
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)