Formulář ovlivnující druhý formulář
- r.a.b.b
- Člen | 7
Mám následující problém.
Mám dva formuláře. První je selectbox, který vybírá oddělení zaměstnanců a poté načte informace o zaměstnancích do tabulky v templatu, ovšem u každého zaměstnance potřebuji mít dva checkboxy na práva read a write. Druhý formulář generuje dva checkboxy pro každého zaměstnance a zobrazuje je jako poslední dva sloupce v tabulce v template. Problém je v tom že pokud ja vyberu oddělení sice se mi objeví tabulka a vygeneruje druhý formulář, ale pokud si chci zatrhat v druhém formulari checkboxy a potvrdit ho tak se mi data nepřenesou v proměnné $form->values do funkce ..isSubmitted druhého formuláře. Pokud někdo víte v čem je problém, prosím o radu. Díky
- Filip Procházka
- Moderator | 4668
Problém bude v tom, že to máš jako dva formuláře. https://github.com/…e-adddynamic
- Ot@s
- Backer | 476
r.a.b.b napsal(a):
Mám dva formuláře… Problém je v tom že pokud ja vyberu oddělení sice se mi objeví tabulka a vygeneruje druhý formulář, ale pokud si chci zatrhat v druhém formulari checkboxy a potvrdit ho tak se mi data nepřenesou v proměnné $form->values do funkce ..isSubmitted druhého formuláře. Pokud někdo víte v čem je problém, prosím o radu. Díky
A přenášíš i ID oddělení z prvního formuláře do druhého? Dej si do druhého formuláře hidden pole s vybraným ID oddělení (po submitu druhého formuláře asi neproběhne jeho vytvoření).
- Ot@s
- Backer | 476
r.a.b.b napsal(a):
Dobre a jak to teda vyřeším jedním?
Nezkoušeno, ale zhruba by to mělo sedět…
$presenter = $this;
$form = new Nette\Application\UI\Form;
// vyber oddeleni
$form->addSelect('department', 'Oddeleni', (array) $this->model->adresar->getDepartments() )
->addRule(Form::FILLED, 'Vyplňte oddeleni.');
if ($form->isSubmitted()) {
// seznam osob ... navratovy format array( 0=>array("staff_id"=>007, "read"=>1, "write"=>0, "name"=>"Karel"), 1=>array(...) )
$staff = $this->model->adresar->getStaff( $form['department']->getValue() );
// jméno, továrnička, výchozí počet
$replicator = $form->addDynamic('staffRights', function (Container $container) use ($presenter, $staff) {
$i = (int) $container->getName();
$container->currentGroup = $container->form->addGroup('člověk: '.$staff[$i]['name'], FALSE);
$container->addHidden('department_id')->setDefault( $this->parent['department']->getValue() );
$container->addHidden('staff_id');
$container->addCheckbox('read', 'Read');
$container->addCheckbox('write', 'Write');
}, count($staff) );
$form->setDefaults( array('staffRights'=>$staff) );
$form->addSubmit('save', 'Ulozit')
->onClick[] = callback($this, 'saveResult');
} else {
$form->addSubmit('show', 'Zobraz zamestnance');
}
return $form;
- r.a.b.b
- Člen | 7
Jak rozjedu ten replicator, ktery implicitne neni ve forms v nette. Zkousel jsem ho zkopirovat do adresare app/libs/replicator.php … presenter ho sice nasel ale pak mi to psalo ze container not found, zkousel jsem upravovat cestu na Nette\Forms\FormContainer ale neslo to nijak.