Pristup k promene v sablone

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

Mam zacatecnicky dotaz, jakym zpusobem se daji vypsat promene po postu formulare?
presneji

<?php
public function contactFormSubmitted($form) {
				try {

					$this->pokus = (array)$form->getValues();
					$this->sendMail($form->getValues());
                        $this->flashMessage('Your application form was sent successfully!');
                        		$this->template->formValues = $form->getValues();
					$this->redirect('close',$this->pokus);

                } catch (IOException $e) {
                        $form->addError($e->getMessage());
                }
        }

public function renderClose($variables)	{

	$this->template->email='';
	$this->template->aaa = $variables;
	$this->template->pokus = $this->pokus;
	}
?>

cekal bych ze v sablone budu moct pouzit {aaa[‚xxx‘]} jenze to je prazdne. Funguje me promena {pokus}, jenze pouze pokud je perzistentni (coz neni uplne to co bych si predstavoval). Ladenka vidi krasne vsecky promene z formulare, jenze se k nim nedostanu. Zkusil sem i

$httpRequest = $container->httpRequest;
$get = $httpRequest->getQuery();

Tady pro zmenu zkoncim, ze $container neni definovat. Poradi nekdo „rozumnou“ metodu jak ty data precist? (samosrejme pokud by se to cele povedlo predat v tom $this->redirect(‚close‘,$this->pokus); byl bych nejstastnejsi)

Editoval tgif (6. 2. 2012 16:52)

Rellik
Člen | 104
+
0
-

Jestli myslíš po odeslání formu, tak odeslané proměnné jsou dostupné tak:

$form->values->jmeno_inputu;
OndrejSlamecka
Člen | 41
+
0
-
<?php
// onSuccessHandler:
$this->template->formValues = $form->getValues();
?>

Je správné řešení jak dostat vstup z formuláře do šablony. V šabloně k nim přistoupíš prostě {$formValues->inputName}. Proč bys chtěl ty data vložit v „renderClose“? Metody render se starají o vykreslování. Handlery jako „contactFormSubmitted“ o zpracování formuláře.

Používej prosím formátování kódu, stačí ho napsat do <?php … ?>.

Editoval OndrejSlamecka (24. 1. 2012 20:40)

tgif
Člen | 8
+
0
-

v kodu sem se samozrejme pokusil pouzit

<?php
$this->template->formValues = $form->getValues();
?>

jenze se mi to pri redirectu ztrati (nebo nevim jak to potom v ty sablone kam se presmeruju najit

<?php
$form->values->jmeno_inputu;
?>

sem samozrejme taky zkousel a furt nic (pritom ladenka ty promene vidi, jenze uz mi nerekne jak se k nim dostat).
Normalne bych si ty data nasel, jenze tenhle problem je zpusobenej tim ze obsah toho redirectu se navic vykresluju v lightboxu a bez pouziti globalni promeny nemam tuchu jak se k tem datum dostat.

Editoval tgif (6. 2. 2012 0:32)

Ot@s
Backer | 476
+
0
-

tgif napsal(a):
jenze se mi to pri redirectu ztrati (nebo nevim jak to potom v ty sablone kam se presmeruju najit

Moc tomu celému, co píše nerozumím, resp. nedává mi to moc smysl. Tomu budou odpovídat i rady.

  1. neprováděj redirect (proměnná se ti „neztratí“)
  2. pokud tam musí být redirect, používej před redirectem uložení obsahu formu do session

Pokud použiješ persistenci, tak data najdeš v proměnné presenteru/komponenty, kterou jsi označil jako persistetní.

class ProductPresenter extends Presenter
{
    /** @persistent */
    public $data;

    public function renderDefault() {
        $this->template->data = $this->data;
    }
}

Editoval Ot@s (6. 2. 2012 6:35)

tgif
Člen | 8
+
0
-

Chapu vyjadruju se trosku zmatene, v podstate vse o co mi slo je jestli je mozne zavolat

<?php
$this->redirect(‚close‘,$this->pokus);
?>

tedy presmerovat se na stranku/sablonu a predat tam nejaky parametr (resp. kdyz uz ho predam kde ho najdu?). Ulozit promene do session jeste vyzkousim, ale nejsem si uplne jist, ze zpusobem kterym predavam data lighboxu se mi nespusti nova. Kdyz vynecham redirect, zobrazi se mi uvodni stranka webu. Pres ty persistentni parametry mi to s redirectem funguje perfektne, ale chtel sem se jim vyhnout (nemam rad globalni promenne).
kazdopadne dik, za podnet