toggle() u ručně vykresleného formuláře

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

Nevíte někdo, jak se dá použít toggle() v případě, že formulář vykresluju „ručně“? Pokud mám formulář definovaný takto:

<?php
class pokusnyForm extends Form
{

    public function __construct(IContainer $parent = NULL, $name = NULL)
    {
        parent::__construct($parent, $name);

	   $pohlavi = array(
            '1' => 'muž',
            '2' => 'žena',
               );

          $this->addGroup();
          $this->addRadioList('idpoh', '', $pohlavi)
                  ->addCondition(Form::EQUAL, 2)
                  ->toggle('zena');

          $this->addGroup()->setOption('container', Html::el('div')->id('zena'));
          $this->addUpload('file', '');

          $this->setCurrentGroup(NULL);
          $this->addSubmit('save', 'Uložit fotku')
          ->getControlPrototype()->class('insButton');
       }
?>

a v šabloně si vykreslím formulář pomocí

{widget pokusnyForm}

tak toggle() funguje jak má (pokud zvolím v radiolistu „žena“) tak se zobrazí další prvek formuláře (addUpload), jinak tento prvek není vidět. Potřeboval bych to použít pro ostylovaný formulář, který vykresluju v šabloně ručně takto:

{form pokusnyForm}
<?php $form->render('begin') ?>
<?php $form->render('errors') ?>
<div id="registrace-form">
        <table>
         <tr>
            <th><?php echo $form['idpoh']->label ?></th>
            <td><?php echo $form['idpoh']->control ?></td>
        </tr>
         <tr>
            <td><?php echo $form['file']->control ?></td>
        </tr>
        </table>
</div>
<div id="registrace-tlacitko"><?php echo $form['save']->control ?></div>
<?php $form->render('end') ?>
{/form pokusnyForm}

V tomto případě už toggle() nefunguje a vykreslí se vždy všechny prvky. Dá se to nějak pořešit, abych mohl formátovat jednotlivé prvky formuláře pomocí css a zároveň mohl skrýt určité prvky formu pomocí toggle?

Editoval reskator (8. 2. 2012 21:38)

Tomáš Votruba
Moderator | 1114
+
0
-

Toggle pracuje s #id ve stylu, tedy tvůj příklad růčo a ve zkratce:

Pro vykreslení můžeš používat formulářová makra.

<table>
	{form toggleForm}
		<tr>
			<td>{label idpoh /}</td><td>{input idpoh}</td>
		</tr>
		<tr id="zena">
			<td>{label file /}</td><td>{input file}</td>
		</tr>
	{/form}
</table>

Dodatky:

  • kód tu dávej do příslušných tagů (<?php … ?>), ať je to pěkně barevné
  • class u prvků se nastavuje přes ->setAttribute("class", "myClass"), viz. dokumentace
  • vše o toggle si můžeš přečíst tu

Editoval Schmutzka (8. 2. 2012 23:55)

reskator
Člen | 18
+
0
-

Pefektní! Díky moc. Za špatné tagy omluva, už jsem to napravil.