AJAX a Layout

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

Tak mám bug. Možná to nenjí bug, každopádně potřebuju helfnout…

Mám layout a view…

Ve view mám snippety, které se mi už krásně AJAXově překreslují…

Ale, jeden ten snippet vykresluje proměnou title…

A já bych chtěl, aby se změnila zároveň i ta samá proměnná, kterou vykresluje layout v titlu – ale absolutně nevím jak toho dosáhnout..

zkoušel jsem trik, jako že jsem do toho snippetu narval assign, ale to nepomohlo…

Prostě potřebuju udělat to, že mi snippet změní proměnou v layoutu no…AJAXOvě…

Víte někdo jak na to? (pokud možno jinak než, že zruším layout a narvu to všechno do view… to už mě napadlo také…)

romansklenar
Člen | 655
+
0
-

Myslím, že tohleto při klasickém renderování nijak nepůjde, protože když vykresluješ šablonu pohledu tak už máš vykreslený layout. Na tyhle účely bylo určeno obrácené renderování.

Jedině někde zkusit to dát do metody prepare nebo beforeRender (pokud jde o snippet tak snad i v handle) pokud už tu proměnnou title co hážeš do šablony pohledu znáš, tam by snad layout ještě nemusel být vykreslený, nevím – nezkoušel jsem.

_Martin_
Generous Backer | 679
+
0
-

Snippety fungují tak, že ti pošlou kus překreslené stránky, kterou JavaScriptem přelepí na místo původní. Takže bys musel mít v layoutu snippet u titulku, tj. něco jako:

{snippet title}
<title>{$title}</title>
{/snippet}

a ten překreslovat. A nebo si AJAXem mezi daty posílat kromě snippetu pohledu i samostatný titulek a na klientovi ho dynamicky nastavovat (pokud to JavaScript umí…?).

Ondřej Mirtes
Člen | 1536
+
0
-

K čemu šmarjá to?
A navíc <title> snippety obalit nelze, v <head> snad <div>y být nesmí, ne?

EDIT: Spelling fail :D

Editoval LastHunter (18. 4. 2009 13:44)

_Martin_
Generous Backer | 679
+
0
-

A navíc <title> snippety obalit nelze, v <head> snad <div>y bít nesmí, ne?

Na tom něco pravdy bude – takže snippety lze vyloučit.

K čemu šmarjá to?

Napadá tě, jak jinak dostat na stránku AJAXově jiný titulek? Snippety padly kvůli divu, poslat celou stránku zase není AJAX… Tak potom – pokud umí JavaScript nastavit titulek – si jej posílat mezi JSON daty a na klientovy měnit obslužným handlerem AJAXové funkce.

Inza
Člen | 330
+
0
-

God;-) – mě je jedno jak to bude fungovat, prostě jen potřebuju, aby to fungovalo;-):-D…

To nějak vymyslete;-) – Jinak ten obrácený způsob vykreslování šablon už funguje?

romansklenar
Člen | 655
+
0
-

Viz toto vlákno. Je tam ale pár nepříjemných chybek co se týče snippetů.

Honza Marek
Člen | 1664
+
0
-

Jéžišmarjá… Obrácený způsob renderování při ajaxu ničemu nepomůže. Divy v title být nesmí atd…


Budu předpokládat, že používáš tento ajax driver. Čili řešení by bylo asi takto:

V php si můžeš do ajaxové odezvy přidat další „proměnnou“:

$this->getAjaxDriver()->title = $title;

Pak v JS ten ajax musíš volat tak, aby se zpracovával nejen tím mým univerzálním „nette callbackem“, ale i nějakým tvým vlastním.

function myCallback(data) {
	if (data.title) {
		// tady rozhodně neručím za to, že titulek se nastavuje opravdu takhle
		document.title = data.title;
	}
};

$.get(adresa, function (data) {
    $.netteCallback(data);
    myCallback(data);
});

Asi takhle bych to zkoušel já…

_Martin_
Generous Backer | 679
+
0
-

Honza M. napsal(a):

Jéžišmarjá… Obrácený způsob renderování při ajaxu ničemu nepomůže. Divy v title být nesmí atd…

Jo tohle jsi myslel tím ježišmarjá… =)

Budu předpokládat, že používáš tento ajax driver. Čili řešení by bylo asi takto:

Jsi rychlejší =) Potvrzuji, řešení je funkční a nastavení titulku chodí.

David Grudl
Nette Core | 8228
+
0
-

Panebože, možná by mohlo fungovat (druhé title je tag)

{snippet title title}{$title}{/snippet}
Honza Marek
Člen | 1664
+
0
-

He… co to je? Funguje to? A jak vypadá odezva?

nAS
Člen | 277
+
0
-

LastHunter napsal(a):
K čemu šmarjá to?

Inza napsal(a):
God;-) – mě je jedno jak to bude fungovat, prostě jen potřebuju, aby to fungovalo;-):-D…

Honza M. napsal(a):
Jéžišmarjá… Obrácený způsob renderování při ajaxu ničemu nepomůže. Divy v title být nesmí atd…

David Grudl napsal(a):
Panebože, možná by mohlo fungovat (druhé title je tag)

Že by se nám tady formoval kroužek věřících? ;)

tom
Člen | 171
+
0
-

Inza napsal(a):

Mám layout a view…
Ve view mám snippety, které se mi už krásně AJAXově překreslují…

Muzu poprosit o konkretni ukazku jak na to? Mym zamerem je, ze chci aby se jedna cast stranky (uzavrena v div) pravidelne sama od sebe prekreslovala. rekneme jednou za 30s. Nakopne me nekdo, jak to v nette udelat? Dik

na1k
Člen | 288
+
0
-

tom: Pokud chceš ty překreslované data tahat ajaxově, asi bych použil klasický link se signálem (něco jako „další slide“, případně ho pomocí stylů schovat) a pak bych sepsal nějakou minifunkcičku v js, která by co 30s (setInterval) na tento odkaz klikala.

Určitě by to šlo i tak, že ta funkce bude přímo posílat požadavek, ale nevím teď jak vypadá ajaxí nette handler a tohle je celkem čisté řešení i pro případ, že by se js zpracování nette odkazů nějak změnilo.

h4kuna
Backer | 740
+
0
-

nAS napsal(a):

Že by se nám tady formoval kroužek věřících? ;)

Bože neexistující…

tom
Člen | 171
+
0
-

na1k napsal(a):
… a pak bych sepsal nějakou minifunkcičku v js, která by co 30s (setInterval) na tento odkaz klikala.

muzu poprosit o radu jak by takova js funkce ktera by pravidelne klikala na nejaky odkaz mohla vypadat? zkousim to v jquery, ale nevim jak zaridit to kliknuti :) predem diky za nejakou ukazku

Ondřej Mirtes
Člen | 1536
+
0
-

tom napsal(a):
nevim jak zaridit to kliknuti :)

$("a.mujodkaz").click();
Honza Kuchař
Člen | 1662
+
0
-

jeste pridam ten interval :)

setInterval(function(){
	$("a.mujodkaz").click();
},30000);