Vytvoření druhého formuláře při zpracování prvního

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

Zdravím, mám problém s vytvořením formuláře v části kde zpracovávám první formulář .. Zkusím to na příkladu:

  1. Vytvořím form 1, kde u submitu nastavím onclick na zpracujNahled
  2. V funkci zpracujNahled chci vytvořit další formulář, nastavím mu onclick na zpracujOdeslani ($form[‚submit‘]->onClick[] = array($this, „zpracujOdeslani“);)
  3. K provedení funkce zpracujOdeslani nikdy nedojde, nevím proč

Používám při tom i AjaxRenderer zmíněný v některém ze zdejších vláken..

Je taky možný, že něco dělám blbě :)

Tomik
Nette Evangelist | 485
+
0
-

Zkus se s námi podělit o nějaké důležité fragmenty kódu.

phx
Člen | 651
+
0
-

Problem bude, ze v pripade odeslani druheho formulare se nezavola prvni zpracujNahled(). Tudiz se ani onen druhy formular nevytvori a Nette nevi ze se ma neco nekde volat (zpracujOdeslani).

Ola
Člen | 385
+
0
-

Jo, právě tím to bude, ale nemáte někdo nápad jak to řešit mimo toho že si ten form připravím někde bokem a uložím do proměnné třídy?

phx
Člen | 651
+
0
-

Persistentni parametr $krok. Pri 1 vytvoris prfni form, pri 2 druhy atd.

Ola
Člen | 385
+
0
-

To si myslím, že nic nevyřeší, protože pak by si každý mohl z adresy něco/?krok=2 zobrazit rovnou formulář 2, což není žádoucí.. Hidden taky není řešením (někdo si vytvoří vlastní form a z kroku 1 přeskočí na 4), možná ukládat to do session (to bude asi nejlepší varianta)..

_Martin_
Generous Backer | 679
+
0
-

A co vytvořit všechny formuláře najednou (třeba v actionXYZ) a v obsluhách událostí nastavit, který formulář se zobrazí (a do něj i nahrát data)?

phx
Člen | 651
+
0
-

Nevim presne na co potrebujes 4 kroky, ale predpokladam, ze finalni ulozeni bude az na konci. Takze ty data stejnam kusis nekde stradat. A pokud nekdo skoci na 4 krok a ty detekujes ze nemas data ze 3. tak sup s nim na 3. A ma peska.

David Grudl
Nette Core | 8218
+
0
-

phx napsal(a):

Nevim presne na co potrebujes 4 kroky, ale predpokladam, ze finalni ulozeni bude az na konci. Takze ty data stejnam kusis nekde stradat. A pokud nekdo skoci na 4 krok a ty detekujes ze nemas data ze 3. tak sup s nim na 3. A ma peska.

Přesně tak to dělám. V session má pole $data, jehož prvky představují data jednotlivých kroků. Např. po odeslání formuláře ve třetím kroku zapíšu $data[3] = $form->getValues(); a přesměruju na čtvrtý.

Na začátku presenteru pak přesměruju na první „díru“ v poli, pokud je menší než než aktuální číslo kroku.

Ola
Člen | 385
+
0
-

David Grudl napsal(a):
Přesně tak to dělám. V session má pole $data, jehož prvky představují data jednotlivých kroků. Např. po odeslání formuláře ve třetím kroku zapíšu $data[3] = $form->getValues(); a přesměruju na čtvrtý.

Na začátku presenteru pak přesměruju na první „díru“ v poli, pokud je menší než než aktuální číslo kroku.

Díky! Zkusím to tak ..

phx
Člen | 651
+
0
-

Jeste mozna rozsirit o nejaky token aby slo pracovat ve vice oknech.

Ola
Člen | 385
+
0
-

Proč by to nešlo ve více oknech? Když přijde na stránku z jinýho okna tak se dostane na krok kde je v tom předchozim ..

phx
Člen | 651
+
0
-

Myslel jsem jako kdyz bude chtit vyplnovat 2 ruzne formulare najednou. Takto by se dostal na ten samy krok jako v druhem okne.

Ola
Člen | 385
+
0
-

Jo, já vim :) Ale já chtěl docílit toho, čemu ty se snažíš zabránit – aby uživatel mohl mít rozdělanej pouze jeden formulář a další až potom co jej dokončí (nebo zruší).. Ale někde se může hodit to co říkáš ty ;)