Ako poslať premennú do komponentu?

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

Zdravím, začínam s nette, prerábam si jedno fórum, ktoré som písal bez frameworkov a narazil som na problém pri vytváraní formu. Potrebujem nejako odoslať do databázy aj id práve prezeraného článku, existuje niečo takéto?

<?php
	protected function createComponentPridajPrispevok($clanok_id)
	{
	    $prispevokForm = new Nette\Application\UI\Form;
	    $prispevokForm->addText('fp_prispevok')->setValue('Sem napíšte svoj komentár')->setAttribute('onfocus','vymaz(this,\'Sem napíšte svoj komentár\')')->setAttribute('style','width: 950px;');
	    $prispevokForm->addSubmit('send','Pridať');
	    $prispevokForm->addHidden('fp_clanok_id')->setValue($clanok_id);
	    $prispevokForm->getElementPrototype()->id = 'form-pridaj-prispevok';
	    $prispevokForm->getElementPrototype()->style = 'display: none;';
	    $prispevokForm->onSuccess[] = $this->pridajPrispevokSucceeded;
	    return $prispevokForm;
	}
?>

A ak hej, ako by som mohol poslať tú premennú? Pretože niečo takéto:

{control pridajPrispevok($aktualny_clanok->fc_cid)}

očividne nefunguje :(

Oli
Člen | 1215
+
0
-

Rekl bych, ze tohle je spis zalezitost OOP nez frameworku. Paklize teda chapu dobre tvuj dotaz.
to id by jsi mel mit v nejake metode actionDefault($id), tak si to predas do promenne tridy a predas tomu formulari… Není ale potřeba to vubec ukládat do hidden inputu. To ID tam bude stejne i po odeslani formulare.

Šaman
Člen | 2666
+
0
-

Nedávno se to řešilo, že takhle to nejde.

Anubis
Člen | 6
+
0
-

Ďakujem za odpovede, spravil som to teda cez $this->getParameter(), ale za posledné hodiny som našiel veľa takých diskusií, kde boli podobné kódy jak ten môj, tak som to chcel vyskúšať. Pretože takto, ak by som sa chcel dostať napríklad k menu autora článku, musel by som si ho vytiahnuť z databázy cez to id. Nevadí, keď to nejde, tak to nejde..

Šaman
Člen | 2666
+
0
-

Ty ale zkoušíš předat parametr továrničce na komponentu, to nejde. getParameter() nepotřebuješ, ty ten parametr předáš pohledu, který komponentu vykresluje (ale musí to být už do action metody, ne až render) a následně ho předáš už hotové instanci konkrétní komponenty (formuláře). Inspirovat se můžeš třeba tady.

Editoval Šaman (21. 5. 2014 1:13)

thm
Člen | 147
+
0
-

Jinak k tomu, že

{control pridajPrispevok($aktualny_clanok->fc_cid)} očividne nefunguje :(

mohu říct, že někdy se může hodit

{control prispevky:seznam, $by}

Sice to není předání proměnné do komponenty, ale toto zavolá na komponente prispevky renderSeznam($by). Prostě pošleš nějaká data přímo do render metody komponenty, což se někdy hodí. Teoreticky bys komponentu ještě asi mohl dokonfigurovat tam, ale to by se rozhodně nemělo.

Šaman
Člen | 2666
+
0
-

thm napsal(a):

Jinak k tomu, že

{control pridajPrispevok($aktualny_clanok->fc_cid)} očividne nefunguje :(

mohu říct, že někdy se může hodit

{control prispevky:seznam, $by}

Sice to není předání proměnné do komponenty, ale toto zavolá na komponente prispevky renderSeznam($by). Prostě pošleš nějaká data přímo do render metody komponenty, což se někdy hodí. Teoreticky bys komponentu ještě asi mohl dokonfigurovat tam, ale to by se rozhodně nemělo.

Tohle je použitelné v některých případech (typicky komponenta která jen něco vykresluje), ale ne u formulářů. U formulářů je pozdě něco nastavovat už při vykreslování.