Jak prepisu snippet hodnotou vracenou pri volani ajaxem?

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

Ahoj,

zacal jsem si hrat s nette ajax a rad bych se zeptal, ve ktere promenne v presenteru najdu to co mi samotne ajaxove volani vraci…

V sablone mam neco takoveho:

<a n:href=":Account:Register:" class="ajax btn btn-default btn-squared btn-block btn-sm">
Registrace
</a>
{snippet ajaxChange}
   {$anyVariable}
{/snippet}

Toto mi vrati html kterym potrebuji nahradit jiny html blok … idelane uvedene $anyVariable.

Poradi prosim nekdo jak na to, pripadne posle nejaky odkaz na kousek kodu, kterym toto resi?

Dekuji mnohokrat,

@flexroad

David Matějka
Moderator | 6445
+
0
-

ten snippet musis invalidovat v presenteru, viz doc

flexroad
Člen | 117
+
0
-

@matej21 : Jojo. To chapu. Ale nechapu, jak mam naplnit promennou $anyVariable tim co mi vrati to volani.

renderDefault muze vypadat pro :Account:Register: napriklad takto:

public function renderDefault()
{
	     $this->template->anyVariable = SEM POTREBUJI DOSTAT OBSAH TEMPLATE;
	     if ($this->isAjax()) {
	          $this->presenter->invalidateControl('ajaxChange');
	     }
}

Kdyz do anyVariable nastavim nejaky string, tak vse funguje jak ma. Jen misto toho stringu potrebuju nastavit to, co ubsahuje template pod tim presenterem.

Nejaky napad?

Diky,

@flexroad

David Matějka
Moderator | 6445
+
0
-

eh? presenter nastavuje template, co se ma zobrazit. V presenteru neziskas obsah template.
A vubec to nechapu…

Jen misto toho stringu potrebuju nastavit to, co ubsahuje template pod tim presenterem.

a kde se to tam v template vezme? prece z presenteru nastavujes to, co se ma zobrazit…

flexroad
Člen | 117
+
0
-

Pokusim se vysvetlit na jednoduchem prikladu:

Potrebuji udelat „one page“ a veskery obsah nacitat pres ajax do nejakeho divu. Zaroven potrebuji menit url pres history.nette.ajax.js.

Takhle nejak bude vypadat sablona:

<div class="menu">
<a n:href=":Account:Login:" class="ajax">prihlasit</a>
<a n:href=":Account:Register:" class="ajax">registrovat</a>
</div>
<div class="obsah">
{snippet ajaxChange}
   {$anyVariable}
{/snippet}
</div>

Pokud pak v prohlizeci otevru www.example.com, vrati to vypis uvedene sablony.

Pokud pak kliknu na odkaz prihlasit, ve firebugu vidim, ze se vola www.example.com/login a v jeho response vidim nejaky html (napriklad <form>…</form>). A to je presne to co potrebuju dostat do promenne $anyVariable.

@flexroad

David Matějka
Moderator | 6445
+
0
-

aha takhle.. udelej si teda normalne sablony pri dalsi presentery/akce a obsah, ktery se ma menit obal tim snippetem,
takze na homepage budes mit:

<div class="menu">
<a n:href=":Account:Login:" class="ajax">prihlasit</a>
<a n:href=":Account:Register:" class="ajax">registrovat</a>
</div>
<div class="obsah">
{snippet ajaxChange}
Ahoj svete!
{/snippet}
</div>

na strance s loginem

<div class="menu">
<a n:href=":Account:Login:" class="ajax">prihlasit</a>
<a n:href=":Account:Register:" class="ajax">registrovat</a>
</div>
<div class="obsah">
{snippet ajaxChange}
   {control loginForm}
{/snippet}
</div>

atd.
snippety se totiz na strane klienta rozlisuji dle id, ktere to neni zavisle na presenteru, ale pouze na nazvu snippetu (a pripadne komponente, pokud je to zanorene)

ale mozna bude lepsi to tiz snippetem obalit rovnou v layoutu

<html>
<head>
...
...
<body>
<header>
</heder>

....
...
{snippet content}
{include #content}
{/snippet}
...
flexroad
Člen | 117
+
0
-

@matej21 : Diky diky a jeste jednou DIKY!!!… To je presne to co jsem potreboval!!!!!

@flexroad