Dynamické formuláře s manuálním vykreslováním
- Rudolf247
- Člen | 38
Zdravím, mám takový problém a už si nevím rady, tak to zkusím zde.
Na začátek asi řeknu, že formulář vykresluji manuálně, protože je
složitější.
Ve formuláři mám dva multiselecty, vždy když se v multiselectu vybere položka přidá se do formuláře další input, takže na straně šablony to mám vyřešené, problém nastává v presenteru, v komponentě kde mám formulář. Potřeboval bych, aby když se přidá na šabloně nový input se v presenteru do komponenty přidal také. Našel jsem Kdyby/Replicator, ale tam jak jsem pochopil musím kliknout na button aby se přidal další container, ale to mi nevyhovuje. Jde to nějak vyřešit? Děkuji.
- Rudolf247
- Člen | 38
Děkuji za rychlou odpověď, ale asi jsme si nerozuměli. Tak půjdu do podrobna.
V šabloně mám multiselect:
<div class="form-group required">
<label n:name=involved_employees class="col-md-12">Zapojení zaměstnanci:
<select n:name=involved_employees class="employee employees form-control" multiple>
</select>
</label>
</div>
A vždy když v tom multiselectu něco vyberu, tak se mi javascriptem vytvoří nový input v šabloně:
<input name="subtask[emp][0][task]" id="subtask[emp][0][task]" class="form-control" type="text" autocomplete="on" placeholder="Zadání podúkolu..." maxlength="15000">
Tady mám v presenteru ten multiselect, ale to je asi nepodstatný:
$form->addMultiSelect('involved_employees', NULL, $emp_option)
->setRequired('Vyplňte prosím toto pole');
A potřeboval bych aby když se mi v šabloně vytvoří ten nový input aby se do presenteru přidalo něco jako
$form->addText('subtask[emp][0][task]')
To číslo se samozřejmě bude přibývat, ale to už bych asi vyřešil.
- David Matějka
- Moderator | 6445
S kdyby replicatorem request na server nemusis provadet. Staci javascriptem vytvorit ty inputy tak, jak by je vytvoril kdyby replicator. On se po odeslani postara o to, ze se vytvori spravny pocet containeru a naplni se daty.
- Rudolf247
- Člen | 38
To rád slyším a toto řešení sem i velice líbí. Není někde podrobný návod? Udělal jsem to že jsem v komponentě měl toto:
$form->addDynamic('subtask', function (Container $subtask){
$subtask->addText('task');
}, 1);
a když jsem dumpoval výsledek vylezlo mi pouze tohle:
subtask => Nette\Utils\ArrayHash #96de
emp => Nette\Utils\ArrayHash #725f
task => ""
i když jsem tam inputů měl víc a navíc se tam neodešle value toho inputu…
- David Matějka
- Moderator | 6445
ten input by se mel jmenovat treba subtask[0][task]
.. pod tim
indexem 0 to pak bude ve values