Znovupoužití formu add/edit

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

Zdravim, vim, ze to tady bylo uz tak nejak resene, ale narazil jsem na problem.

Mam udelanou tovarnicku, ve ktere si vytvarim formular pri pridavani do databaze. Ten samy formular chci pouzit pro editaci. Jeho naplneni daty mi funguje, ale co mi nefunguje je prejmenovani nazvu tlacitka pro odeslani a zmena handleru po kliknuti.

public function actionEdit($id)
{
	$this->setView('add');

	$form = $this->getComponent('addactionform');

	$actionData = ActionsModel::getActionById($id, Environment::getUser()->getIdentity()->getName());

	if ($actionData == FALSE)
		$this->rediret("Actions:badid");

	$form->setDefaults(array('actionname' => $actionData['actionname'],
	        	'actiondesc' => $actionData['description'],
	        	'datumod' => date("d.m.YYYY", $actionData['datestart']),
	        	'datumdo' => date("d.m.YYYY", $actionData['dateend']),
	        	'kraj' => $actionData['kraj'],
	 ));

	 $form->onSubmit[] = array($this, 'EditovatClicked');

}

public function EditovatClicked()
{

}

Mam tam nekde chybu v tom prirazovani toho submitu, ze se mi nepreregistruje?
A na zmenu nazvu tlacitka se mi nepodarilo prijit.

Diky za rady.

vlki
Člen | 218
+
0
-

A není lepší si ten formulář nejdřív předpřipravit v továrničce a pak „doladit“ v action? Tzn. přidat až tam callback pro zpracování a tlačítko?

Pokud jde ale o ty změny, měly by být obě proveditelné.

Přejmenování textu tlačítka:

$form->addSubmit('save', 'Uložit');
$form['save']->caption = 'Přidat'; // změní text na tlačítku

Změna callbacku:

$form->onSubmit[] = array($this, 'AddClicked'); // nějaké výchozí nastavení
$form->onSubmit = array(array($this, 'EditClicked')); // nové nastavení

Atributy on<something> jsou vždycky pole callbacků, takže se s nimi i jako s klasickými poli pracuje.

Editoval vlki (3. 9. 2009 23:51)

Cifro
Člen | 245
+
0
-

Dj_Oggy napsal(a):
… Mam udelanou tovarnicku, ve ktere si vytvarim formular pri pridavani do databaze. Ten samy formular chci pouzit pro editaci. Jeho naplneni daty mi funguje …

Možem sa opýtať ako si to urobil?

Dj_Oggy
Člen | 67
+
0
-

2 vlki: Dik, to je presne ono, co potrebuju. U toho submitu jsem si rikal, ze mi nejak nesedi pouziti tech zavorek.
BTW: mozna v tomhle pripade by bylo lepsi dodelavat to tlacitko az v action, ale co kdyz potrebujes treba zmenit tlacitko nekde uprostred formulare? To uz ho pak doprostred nejak nepridas.

2 cifro: Co presne te zajima? Jak udelat tovarnicku nebo neco jinaciho?

EDIT:
Nejak mi nefungovalo to preprirazeni toho tlacitka a nakonec jsem ho vyresil 2 zpusoby:

$form['tlacitko']->onClick = array(array($this, 'EditovatClicked'));

nebo

$form['tlacitko']->onClick[0] = array($this, 'EditovatClicked');

Editoval Dj_Oggy (4. 9. 2009 10:29)

Cifro
Člen | 245
+
0
-

Že ako naplniš ten istý formulár. Som to veľmi neštudoval zatiaľ :/

Dj_Oggy
Člen | 67
+
0
-

Jo aha, tak normalne si tvorim form v tovarnicce a pak, kdyz ho chci editovat, tak mam akci edit (actionEdit($id)) a v nem toto:

$this->setView('add');

$form = $this->getComponent('addactionform');

$actionData = ActionsModel::getActionById($id, Environment::getUser()->getIdentity()->getName());

if ($actionData == FALSE)
    $this->rediret("Actions:badid");

$form->addHidden("actionid")->setValue($id);

$form->setDefaults(array('actionname' => $actionData['actionname'],
                                    'actiondesc' => $actionData['description'],
                                    'datumod' => date("d.m.Y", $actionData['datestart']),
                                    'datumdo' => date("d.m.Y", $actionData['dateend']),
                                    'casod' => date("H:i", $actionData['datestart']),
                                    'casdo' => date("H:i", $actionData['dateend']),
                                    'kraj' => $actionData['kraj'],
));

$form['tlacitko']->caption = "Uložit";
$form['tlacitko']->onClick = array(array($this, 'EditovatClicked'));
Cifro
Člen | 245
+
0
-

Hmmm takže cez setDefaults(). Aj som si to myslel, že nejak takto. Diki ^_^

Aj preto som sa spýtal, lebo tento thread ma veľmi dobrý nadpis, a chcel som aby to aj tu bolo :)

Dj_Oggy
Člen | 67
+
0
-

Vsak jasny :) Nemas zac ;)