jedno odesílací tlačítko pro více formulářů
- batko
- Člen | 219
Tak to bohužel není to co hledám.
Potřeboval bych nějak řešení pro následující:
Mám například 5 fotek a u každé fotky je možné zadat název a popis.
Potřeboval bych, aby šli informace u každé fotky uložit jednotlivě, nebo i u všech na jednou.
Jednotlivě to je jasné, udělám si u každé fotky jeden formulář a je to.
Díky za každou radu…
- David Matějka
- Moderator | 6445
je to to, co hledas :)
musi to byt cele v jednom formu – pro kazdou polozku si vytvor container
s jednotlivyma inputama a tlacitkem + tlacitko pro celej form, pridej eventy na
onClick udalost u tlacitek a podle toho, na ktere se kliknulo,zpracujes
pr.:
$form = new Form;
$photosContainer = $form->addContainer('photos');
foreach($photos as $photo) {
$currentContainer = $photosContainer->addContainer($photo->id);
$currentContainer->addText(...);
$currentContainer->addSubmit('save', 'Ulozit')->onClick[] = function($button) {
$container = $button->parent;
$values = $container->values;
//zpracovani konkretni polozky
};
}
$form->addSubmit('save', 'Ulozit')->onClick[] = function($button) {
$values = $button->form->values;
//zpracovani vsech polozek
};
opraveno
Editoval matej21 (22. 12. 2013 17:00)
- batko
- Člen | 219
<?php
$photosContainer = $form->addContainer('photos');
foreach ($this->photoService->getPreview() as $k => $v) {
$currentContainer = $photosContainer->addContainer($k);
$currentContainer->addText("text")->addRule($form::FILLED);
$currentContainer->addSubmit('save', 'Ulozit')->onClick[] = function($button) {
$container = $button->parent;
$values = $container->values;
};
}
$form->addSubmit('save', 'Ulozit')->onClick[] = function($form) {
$values = $form->getValues(); //CHYBA
};
?>
Tak jsem to zkusil.
Na posledním řádku to hází chybu:
Call to undefined method Nette\Forms\Controls\SubmitButton::getValues().
a nevím si s tím rady
A pak ještě jedna drobnost, jde nějak udělat to, aby při odeslání formuláře jedné fotky byl validován jen tento formulář. A při odeslání všech by byl validován kompletně celý???
Díky moc
- David Matějka
- Moderator | 6445
za chybku se omlouvam..
a k validaci: zkus pouzit setValidationScope na buttonu, konkretne v tom
foreachy uprav ten button na:
$currentContainer->addSubmit('save', 'Ulozit')
->setValidationScope($currentContainer)
->onClick[] = ......
- batko
- Člen | 219
<?php
$photosContainer = $form->addContainer('photos');
foreach ($this->photoService->getPreview() as $k => $v) {
$currentContainer = $photosContainer->addContainer($k);
$currentContainer->addText("name")->addRule($form::FILLED, "vyplnte neco");
$currentContainer->addSubmit('save', 'Ulozit')
->setValidationScope($currentContainer)
->onClick[] = function($button) {
$container = $button->parent;
$values = $container->values;
//zpracování
};
}
$form->addSubmit('save', 'Ulozit')->onClick[] = function($button) {
$values = $button->form->getValues(TRUE);
//zpracovani vsech polozek
foreach ($values["photos"] as $key => $value) {
//zpracování
}
};
?>
tak to bohužel na situaci nic nezměnilo…
pokud odešlu řádek tak to po mě chce vyplněné veškeré řádky
Editoval batko (22. 12. 2013 21:27)
- jiri.pudil
- Nette Blogger | 1032
Jakou používáš verzi Nette? Ve 2.0.x tahle funkcionalita zřejmě není.