Jak prepisu snippet hodnotou vracenou pri volani ajaxem?
- flexroad
- Člen | 117
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
- flexroad
- Člen | 117
@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
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
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
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}
...