jedno odesílací tlačítko pro více formulářů

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

Ahoj,

mám dotaz ohledně zpracování formulářů.

Pro každý řádek tabulky bych měl rád formulář a pod tabulkou bych ho rád jedním tlačítkem uložil.

Jde to řešit nějak elegantně?

Děkuji

Jiří Nápravník
Člen | 710
+
0
-

Co formulářové kontejnery? To jsou takové „formuláře ve formuláři“

batko
Člen | 219
+
0
-

Jiří Nápravník napsal(a):

Co formulářové kontejnery? To jsou takové „formuláře ve formuláři“

nemám s tím zkušenosti, mrknu na to, dík za typ

Editoval batko (20. 12. 2013 15:39)

batko
Člen | 219
+
0
-

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
+
0
-

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
+
0
-
<?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

Aurielle
Člen | 1281
+
0
-

Do callbacku onClick se předává instance SubmitButton, nikoliv formuláře. Stačí si tu chybu přečíst, budeš muset použít $button->form->getValues().

batko
Člen | 219
+
0
-

super, už to jede

a ted k té druhé polovině :-)

jde nějak udělat to, že pokud odešlu jednu položku tak se validuje jen jedna a pokud odesílám celý formulář tak se validuje celý?

David Matějka
Moderator | 6445
+
0
-

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
+
0
-
<?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
+
0
-

Jakou používáš verzi Nette? Ve 2.0.x tahle funkcionalita zřejmě není.

batko
Člen | 219
+
0
-

2.0.13

zkusim tak narvat tu vyšší a uvidíme

EDIT: ale koukám že budu muset lehce aplikaci poupravit aby to s 2,1 jelo, tak to nebude hned

Editoval batko (23. 12. 2013 9:29)