Manuální vykreslování formulářů

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

Dobrý den,
s Nette začínám a nemám dost času na učení se celého frameworku. Proto využívám pouze laděnku (skvělá to věc) a formuláře.
Byl jsem nucen v jednom formuláři využít manuální vykreslování. podmínka $form->isSuccess() nefunguje, $button->onClick() mi zas „vypíše“ již po spuštění (bez kliknutí).
Máte někdo zkušenosti s tímto problémem?
Děkuji za odpověď.

Ot@s
Backer | 476
+
0
-

Málo informací na konkrétní odpověď. Pošli metodu s definicí fomruláře (a možná i šablonu s formulářem).

Payne
Člen | 14
+
0
-

Dobrá tedy, doplním třídou.

	class Confirm {
		private $year;
		function __construct($rok) {
			$this->year = $rok;
		}
		public function show() {
			$form = new NForm();
			for($i=0; $i < $this->pocetZaznamu(); $i++) {
				$sub[$i] = $form->addContainer($i);
				$sub[$i]->addRadioList('schvaleno', '', array(1 => 'Ano', 0 => 'Ne'))
				->setDefaultValue(1)
				->getSeparatorPrototype()
				->setName(NULL);
			}
			$form->addSubmit('submit', 'Odeslat');
			$prom = dibi::query('SELECT p.Id, p.Jmeno, z.Zadanii FROM Prace p JOIN Zadani z ON p.Zadani_Id = z.Id WHERE Rok =', $this->year, 'ORDER BY Jmeno');
			$txt = "<table border='1'>";
			$pole = array();
			foreach ($prom as $n => $row) {
				$txt .= "<tr><td>".$row['Jmeno']."</td><td>".$row['Zadanii']."</td><td>".$form[$n]['schvaleno']->getControl()."</td></tr>";
				$pole[] = $row['Id'];
			}
			$txt .= "<tr><td colspan='3'>".$form['submit']->getControl()->onClick($this->sql())."</td></tr></table><br>";

			return $txt;
		}
		private function pocetZaznamu() {
			$req = dibi::query('SELECT Count(*) AS Pocet FROM Prace WHERE ', array('Rok' => $this->year));
			$pocet = $req->fetchAll();
			return $pocet[0]['Pocet'];
		}
		private function sql() {
			echo "afnbuigfbia";

		}
	}

funkce SQL() by se měla provést, po kliknutí na tlačítko

Editoval Payne (13. 3. 2012 15:08)

Melmen
Člen | 132
+
0
-

Za

$form->addSubmit('submit', 'Odeslat');

ti chybí něco jako

$form->onSuccess[] = callback($this, 'sql');
Payne
Člen | 14
+
0
-

Děkuji za odpověď, ale jak jsem psal. Nevyužívám žádný presenter nebo továrničku (nebo si toho nejsem vědom). Tvoji radu jsem zkusil, bohužel nereaguje.
Vždy jsem prozatím využíval if($form->isSuccess()) nebo setAction. Bohužel v tomto případě bez výsledku.

Nějaké jiné nápady?

Jinak podle dokumentace je potřeba mít nějaké pravidlo, aby onSuccess fungovalo.. To jsem přidal, stále nic :( Už začínám být nešťastný

Editoval Payne (13. 3. 2012 17:45)