Editační formulář
- chemikus
- Člen | 49
Zdravím lidičky. Na stránkách používám jeden a ten stejný formulář pro vložení i pro editaci novinky. Už jsem zde na foru vyhledal, jak formulář při editaci předvyplnit, ale stále nemůžu upravit, kam se editační formulář odesílá. Jasnější to bude určitě, když sem pastnu můj kod.
protected function createComponentNovinkaForm() {
$form = new AppForm;
$viditelnost = array("1" => "Zobrazeno", "0" => "Schováno");
$form->addText('nadpis', 'Nadpis:')->addRule(AppForm::FILLED, 'Zadejte nadpis novinky');
$form->addTextArea('text', 'Obsah novinky:')->addRule(AppForm::FILLED, 'Zadejte text novinky');
$form->addSelect('viditelnost', 'Viditelnost:', $viditelnost);
$form->addSubmit('odeslat', 'Odeslat');
$form->onSubmit[] = array($this, 'novinkaFormSubmitted');
return $form;
}
public function novinkaFormSubmitted(AppForm $form) {
$values = $form->getValues();
$vlozeni = UvodniStrana::insertNewNews($values["nadpis"], $values["text"], $values["viditelnost"]);
if ($vlozeni) {
$this->flashMessage('Novinka byla úspěšně vložena', 'green');
$this->redirect('administrace:uvodniStrana');
} else {
$this->flashMessage('Nepodařilo se vložit novinku. Opakujte akci znovu prosím', 'red');
}
}
public function novinkaEdit($idNews) {
$form = $this->getComponent('novinkaForm');
$news = uvodniStrana::getNews($idNews);
$form->setDefaults(array(
"text" => $news["text"],
"nadpis" => $news["nadpis"],
"viditelnost" => $news["viditelnost"]
));
$form->onSubmit[] = array($this, 'editNovinkaFormSubmitted');
$this->setView('uvodniStranaEditace');
}
public function editNovinkaFormSubmitted(AppForm $form) {
$values = $form->getValues();
$editace = UvodniStrana::editNews($values["nadpis"], $values["text"], $values["viditelnost"]);
if ($editace) {
$this->flashMessage('Novinka byla úspěšně upravena', 'green');
$this->redirect('administrace:uvodniStrana');
} else {
$this->flashMessage('Nepodařilo se upravit novinku. Opakujte akci znovu prosím', 'red');
}
}
Editační formulář se mi stále odesílá na novinkaFormSubmitted a ne na editNovinkaFormSubmitted. A tím pádem se mi tam novinka, kterou edituju uloží jako nová a editovaná zůstane bez změny (jelikož se nezavolá ta editNovinkaFormSubmitted). A už fakt nevím co s tím :-( Určitě to bude jen nějaká blbost, ale stále ji nemohu najít :-(
- Ondřej Mirtes
- Člen | 1536
No ony se ti zavolají obě ty metody. onSubmit[] je běžné pole, které
plníš callbacky, takže v té metodě novinkaEdit ho jen vymaž –
$form->onSubmit = array();
.
BTW: Kdy voláš tu metodu novinkaEdit?
- chemikus
- Člen | 49
Volám to při render fázi
public function renderUvodniStranaEditace($idNews) {
$this->novinkaEdit($idNews);
$this->template->NovinkaForm = $this["novinkaForm"];
}
snad je to ve správné fázi :-)
Jinak dodal jsem to tam a nic. Přepsal jsem to na
$form->onSubmit[] = array();
a stále nic :-/
Editoval chemikus (4. 2. 2010 10:18)
- Ondřej Mirtes
- Člen | 1536
Protože to je pozdě :o) Přendej to do action (v render fázi je už po zpracování formuláře, tak je jasné, že se ti volá jen ta původní metoda udaná v továrničce):
public function actionUvodniStranaEditace($idNews) {
$this->novinkaEdit($idNews);
}
A klidně tu metodu novinkaEdit můžeš dát jako private.
- Patrik Votoček
- Člen | 2221
$form->onSubmit[] = array();
nic neudela jenom nastavi další „prázdný callback“ spíš přesuň
$form->onSubmit[] = array($this, 'novinkaFormSubmitted');
do renderUvodniStranaAdd
nebo jak se to u tebe jmenuje…
:-)
EDIT: kua tady nez clovek neco napise… to aby se na to jeden rovnou vy… :-D
Editoval vrtak-cz (4. 2. 2010 10:30)
- Ondřej Mirtes
- Člen | 1536
Já ale psal $form->onSubmit = array()
! :) Ale do renderu
tohle fakt nepatří… Buďto do továrničky nebo do action fáze.
- Patrik Votoček
- Člen | 2221
Ondřej Mirtes napsal(a):
Já ale psal
$form->onSubmit = array()
! :) Ale do renderu tohle fakt nepatří… Buďto do továrničky nebo do action fáze.
to moje taky nebyla reakce na tebe…
- PetrP
- Člen | 587
public function novinkaEdit($idNews) {
$form = $this->getComponent(‚novinkaForm‘);
Tohle se mi moc nelíbí.
raději bych šel cestou mít tvě továrničky, kdy jedna vychází
z druhé:
protected function createComponentNovinkaForm()
// to co tam mas
protected function createComponentEditNovinkaForm($name)
{
$form = $this->createComponentNovinkaForm($name);
$form->setDefaults(...);
$form->onSubmit = array();
$form->onSubmit[] = array($this, 'ditNovinkaFormSubmitted');
a treba i
$form['odeslat']->caption = 'Editovat';
return $form;
}