Jeden formulář pro přidání i editaci

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

Zdravím,

konečně jsem se pustil do Nette a právě jsem se zasekl na tom jak řešit jeden formulář pri editaci i přidání do databáze

vyvořil jsem si adminPresenter i model, kde mám autetifikaci a výpis položek(editace/pridani)

pro pridani jsem si vytvoril formular

protected function createComponentBlogPost() {
	$form = new UI\Form;
	$form->addText('nazev', 'Název:', 40, 100)
		->addRule(UI\Form::FILLED, 'Je nutné zadat název příspěvku.');
	$form->addTextArea('text', 'Text:');
	$form->addSubmit('create', 'Vytvořit');
	$form->onSuccess[] = callback($this, 'blogPostSubmitted');
	return $form;

   }

to dal do makrat,
pote vytvoril funci na editovani co mi nastavi hodnoty do formulare(v latte stejny control)

public function actionBlogEdit($id){

        $data = $this->model->getById($id)->fetch();

	 $this['blogPost']->setDefaults(array(
	     'nazev' => $data['nazev'],
	     'text'  => $data['text'],

	 ));

   }

a ted nevim jak nejak elegatne vyresit ukladani, napadlo me neco jako unsetnou callback a pridat novy v action, ale nezda se mi to

dekuji za rady

Ot@s
Backer | 476
+
0
-

Z hlavy +/-

Naplneni vych. hodnot do formulare

public function actionBlogEdit($id){
        $data = $this->model->getById($id)->fetch();
        $this['blogPost']->setDefaults(array(
            'id' => $data['id'], // nebo $id (toto pridat)
            'nazev' => $data['nazev'],
            'text'  => $data['text'],
        ));
   }

Def. formulare

protected function createComponentBlogPost() {
       $form = new UI\Form;
       $form->addHidden('id'); // (toto pridat)
       // atd....
}

Zpracovani

protected function blogPostSubmitted($btn) {
	$values = $btn->form->getValues();
	// pripadne upravy hodnot v $values
	if (empty($values->id))$this->model->getTable('blog')->insert($values); // insert
	else $this->model->getById($values->id)->update($values); // update
	// flashMessage
	// presmerovani
}

Editoval Ot@s (9. 1. 2012 9:25)

Twista
Člen | 48
+
0
-

Ot@s

diky, funguje :))

PavelJurasek
Člen | 39
+
0
-

rád bych se zeptal, zda se dá ještě k tomu nějak upravit popisky např. buttonu (popisek přidat/upravit)

Zdeno1981
Člen | 114
+
0
-

ahoj, mělo by to jít takto:

public function actionBlogEdit($id) {

	$form = $this['blogPost'];
	$form['blogPost']->caption = 'Edit';
	....
}

nebo

public function actionBlogEdit($id) {

	$this['blogPost']->caption = 'Edit';
	....
}

Editoval Zdeno1981 (20. 1. 2012 21:13)

PavelJurasek
Člen | 39
+
0
-

Funguje, díky!

pta
Člen | 11
+
0
-

Twista: jeste jedna mala rada z praxe, ktera by se ti mohla hodit: osobne pouzivam stejnou komponentu na pridavani i editaci a s ni i dve akce pro pridani a editaci (actionNewNeco a actionEditNeco). Ale pouzivam jen jednu sablonu pro obe akce ‚newNeco.latte‘, kde mam makro pro vykresleni formulare. Jednoduse v actionEditNeco nastav na konci view:

public function actionEditNeco($id)
{
	...

	// bud
    $this->setView('newNeco');

	// nebo rovnou
	$this->view = 'newNeco';
}

Nedochazi k presmerovani. Pouze tim rikas, ze chces pro tuto akci pouzit sablonu newNeco.latte takze odpadaji duplicity.

Twista
Člen | 48
+
0
-

pta:

dekuju za rady, uz to mam podobne s jednim view :)

nastesti uz tolik v nette nebadam :)