Jak dostat konkrétní hodnotu z šablony, do defaultní hodnoty formuláře

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

Zaboha nedostanu data v proměnné v šabloně do defaultní hodnoty ve formuláři, už nad tím sedím půl odpoledne.
Prosím nemohl by mi někdo v tomhle poradit? V Nette to přeci nemůže být nijak složité…

Kód:

Odkazem se z jednoho presenteru se dostanu do následujícího níže, obdrží 2 parametry:

public function renderDefault($zaznam_id, $verze_id){
	// z tabulky vybere jeden řádek se sloupečkama id, nazev, text
	$this->template->posledni_verze = VerzeModel::get_vybrana_verze($zaznam_id,$verze_id);
}

V šabloně vypíšu:

{foreach $posledni_verze as $ver}
	<p>{ver->nazev}</p>

        {*tímto předáme parametry do formuláře do skrytých tlačítek
	  tímto způsobem to do defaultní hodnoty formuláře asi nejde přenést.*}
        {?$control['editVerzeForm']['akt_verze_id']->value = $ver->id}

        {control editVerzeForm}
{/foreach}

V presenteru v továrničce na formulář

protected function createComponentEditVerzeForm(){
        $form = new AppForm();

        $form->addHidden('akt_verze_id'); //správně se naplní hodnotou ze šablony
        $form->addTextArea('text', '', 46, 15)
			//tady potřebuju aby se mi načetla proměnná {ver->text} ze šablony
                        ->setDefaultValue( ****> > > > CO SEM NAPSAT? < < < <**** )
        $form->addSubmit('save', 'Uložit')->setAttribute('class', 'default');
        $form->addSubmit('cancel', 'Zrušit')->setValidationScope(NULL);
        $form->onSubmit[] = callback($this, 'editVerzeFormSubmitted');

        return $form;
}
Etch
Člen | 403
+
0
-

Teoreticky třeba takto:

{? $presenter['editVerzeForm']->setDefaults(array('akt_verze_id' => $ver->id))}

ale přijde mi to obecně jako blbost. On ten tvůj příklad je podle mě trochu zmatený. Říkáš, že VerzeModel::get_vybrana_verze() ti vrátí jeden řádek, tak proč to vůbec procházíš přes foreach?

Podle mě by si výchozí hodnoty nastavovat už v presenteru pomocí:

	$this['editVerzeForm']->setDefaults(array('akt_verze_id' => $ver->id))

ale záleží to na konkrétní situaci.

zoltinho
Člen | 24
+
0
-

Ten presenter jsem zkopíroval z jiného bez formuláře kde foreach využiju, bez formuláře… sakra máš pravdu, mě to ani nenapadlo to hodit tam.

A moc díky za ty příklady, mě takovéhle věci ani nenapadnou, že by šly udělat.

Aurielle
Člen | 1281
+
0
-

Přesuň načítání do action fáze a pak se k tomu přes $this dostaneš v továrničce.

jrwm
Člen | 14
+
0
-

Řeším podobný problém. Do továrničky protected function createComponent..(){} potřebuji dostat id z url, ale pokud v action použiji $this[‚název továrničky‘]->setDefaults(…);, nefunguje to.

Majkl578
Moderator | 1364
+
0
-

jrwm: Použij getParam přímo v továrničce:

$form->setDefaults(array('id' => $this->getParam('id')));
jrwm
Člen | 14
+
0
-

Majkl578: No super, díky :)