Formuláre s inputmi generovanými za behu
- leumas
- Člen | 13
Ahojte,
posledný deň som zápasil s problémom, ktorý popisujem nižšie.
V tabuľke mám pre každú udalosť zoznam ľudí. Chcem vytvoriť formulár, ktorý obsahuje input za každého človeka, ktorý sa zúčastnil vybranej udalosti. Problémy na ktoré som narazil:
- Formulár musí byť vytvorený factory metódou createComponent, v opačnom prípade nebude naplnení submitovanými dátami, nezavolá sa onSubmit, atď
- createComponent neprijíma žiadne parametre
- vo vnútri createComponent nemožno testovať formulár na isSubmitted ani checkovať jeho hodnoty
- inputy pridané do formulára po vrátení metódou createComponent nebudú naplnené submitnutými dátami
Jediné riešenie, ktoré som vymyslel, bolo pridať do formulára hidden element s id udalosti a vo vnútri createComponent checkovať httpRequest.
Riešenie sa mi moc nepáči a zaujímalo by ma, aký je odporúčaný spôsob riešenia.
Vopred vďaka za rady
- Filip Procházka
- Moderator | 4668
Replicator, můžeš kouknout i na sandbox
public function actionDefault()
{
$form = $this['usersForm'];
if (!$form->isSubmitted()) { // pokud formuláře nebyl odeslán
foreach ($this->model->findUsers() as $user) {
$container = $form['users']->createOne($user['id']); // vytvoříme položku
$container->setDefaults($user); // naplníme výchozí hodnoty
}
}
}
protected function createComponentUsersForm()
{
$form = new Nette\Application\UI\Form;
// přidání dynamického kontejneru
$form->addDynamic('users', function (Nette\Forms\Container $container) {
$container->addText('username', 'Uživatel');
});
$form->addSubmit('send', 'Odeslat');
$form->onSubmit[] = array($this, 'SaveUsersSubmitted');
return $form;
}
public function SaveUsersSubmitted($form)
{
$users = $form['users']->values;
foreach ($users as $user) { // jednotlivé řádky
dump($user['username']); // hodnota z formuláře
}
}
- Akres
- Člen | 3
Mám nejspíš podobný problém, ale nejsem si tím jistý a s*** se s tím už druhý den tak bych poprosil o potvrzení protože už pomalu nemám sílu.
Mám internetový obchod s nábytkem. Prodávají se tam např. dvířka do kuchyňské linky. Jako jeden produkt (tzn na jedné stránce ) mám vždycky jednu řadu (řekněme řada s názvem Miláno). V této řadě je mrtě různých rozměrů dveří (fakt, je jich asi 50), které jsou rozdělené do několika sekcí ( dvířka na šuplíky, na poličky atd.), každá sekce má vlastní tabulku, která vypadá asi takhle
---------|Červená| Modrá |Zelená
---------|-------|-------|-------
Rozměr1 | cena1 | cena2 | cena3
---------|-------|-------|-------
Rozměr2 | cena4 | cena5 | cena6
---------|-------|-------|-------
atd. myslím, že chápete.
O co mi jde je, že pod každou tabulkou je select box s vybranou
variantou, políčko pro množství a tlačítko „Přidat do košíku“.
Čili mám několik formulářů na jedné stránce, které jsou stejné, ale
select v nich má jiné hodnoty.
No a zaboha jsem nepřišel na to jak tohle udělat zatím..
Editoval Akres (18. 10. 2011 23:09)
- Filip Procházka
- Moderator | 4668
Asi bych udělal prototyp formuláře a ten připojil do presenteru tolikrát, kolikrát bude potřeba.
- michal50070
- Člen | 1
$form->addText(‚name‘, ‚Jméno:‘);
$form->addPassword(‚password‘, ‚Heslo:‘);
$form->addSubmit(‚send‘, ‚Registrovat‘);