AJAX s Nette 2.0 + PHP 5.3 – „hello word“ tutorial

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

Zkousel jsem hledat, ale marne. Mate nekdo jednoduchy navod/priklad (opravdu hello word, nic vic, zadne slozitosti) jak uvest do chodu AJAX s Nette 2.0 + PHP 5.3?

Napriklad: jeden odkaz, ktery by provedl jednoduchou AJAX akci, napriklad zmenil svoji barvu.

Cifro
Člen | 245
+
0
-

Napr. Srigiho SACT… i keď to není zrovna Hello world…

demo: http://sact.phpq.info/

zdrojaky: https://github.com/srigi/sact

Editoval Cifro (5. 12. 2010 18:02)

Aurielle
Člen | 1281
+
0
-

Přesně tohle jsem dělal (ale se starými snippety): http://nette.valvegames.cz/ajax-demo.rar

gerades
Člen | 40
+
0
-

Cifro napsal(a):
demo: http://sact.phpq.info/

Divam se na to a mam par dotazu:

  1. Tu navigaci dal do komponenty jen proto, aby tam mel vetsi prehlednost v kodu a mozna kvuli „reuse“? Nebo je tam neco co nevidim…?
  2. „href=“{plink article! ‚slug‘=>$head->slug}"" → proc pouziva „slug“, proc nepouzije „id“? Zrejme nechapu zapis a praci tady s tim odkazem… :-/
  3. Kdyz klikne na tento odkaz: „href=“{plink article! ‚slug‘=>$head->slug}"" (v navigaci), zavola se „function handleArticle($slug)“, ale ve funkci hangleArticle se nic nenacita a ani se nezmeni hodnota $article->text. Jak je teda mozne, ze se nacte? Tady mi neco unika.
srigi
Nette Blogger | 558
+
0
-

gerades napsal(a):

  1. Tu navigaci dal do komponenty jen proto, aby tam mel vetsi prehlednost v kodu a mozna kvuli „reuse“? Nebo je tam neco co nevidim…?

Je to kvoli tomu, aby bolo mozne navigation bar chapat ako samostatny funkcny blok, ktory si na stranke umiestnis na lubovolne miesto.

  1. „href=“{plink article! ‚slug‘=>$head->slug}"" → proc pouziva „slug“, proc nepouzije „id“? Zrejme nechapu zapis a praci tady s tim odkazem… :-/

Tu mi islo o cool URI (alebo SEO) – nemat v URL nejake nezmyselne IDcka, ale titulok clanku. Ide naozaj len o SEO (a kopirovanie cool URI z Wordpressu).

  1. Kdyz klikne na tento odkaz: „href=“{plink article! ‚slug‘=>$head->slug}"" (v navigaci), zavola se „function handleArticle($slug)“, ale ve funkci hangleArticle se nic nenacita a ani se nezmeni hodnota $article->text. Jak je teda mozne, ze se nacte? Tady mi neco unika.

Toto je naozaj trosku magia, treba si zobrat na pomoc zivotny cyklus presentera. Tam si vsimni, ze handle sa vykona este pred render metodou. A render metoda sa kuka do modelu, co za slug (clanok so slugom) sa ma poslat do sablony. Takze handle metoda iba nastavi slug a render potom v dalsom kroku zivotneho cyklu renderuje uz tento aktualizovany slug. Zaroven invalidovany snippet sposobi, ze render meotda prekresli iba ten dany snippet.

edit: este by som napisal, preco som tu 3. riesil tak ako riesil. Prave kvoli zivotnemu cyklu som hladal riesenie ako komunikovat s Modelom pocas requestu iba raz (jedna DB query). Uz si to nepamatam presne, ale k tomuto konceptu som dosiel preto aby som nequeroval DB raz v handle a potom o chvilu v render metode a zaroven aby sa to nejako spravalo s a bez AJAXU.

Editoval srigi (6. 12. 2010 20:33)

gerades
Člen | 40
+
0
-
  1. Kdyz klikne na tento odkaz: „href=“{plink article! ‚slug‘=>$head->slug}"" (v navigaci), zavola se „function handleArticle($slug)“, ale ve funkci hangleArticle se nic nenacita a ani se nezmeni hodnota $article->text. Jak je teda mozne, ze se nacte? Tady mi neco unika.

Toto je naozaj trosku magia, treba si zobrat na pomoc zivotny cyklus presentera. Tam si vsimni, ze handle sa vykona este pred render metodou. A render metoda sa kuka do modelu, co za slug (clanok so slugom) sa ma poslat do sablony. Takze handle metoda iba nastavi slug a render potom v dalsom kroku zivotneho cyklu renderuje uz tento aktualizovany slug. Zaroven invalidovany snippet sposobi, ze render meotda prekresli iba ten dany snippet.

edit: este by som napisal, preco som tu 3. riesil tak ako riesil. Prave kvoli zivotnemu cyklu som hladal riesenie ako komunikovat s Modelom pocas requestu iba raz (jedna DB query). Uz si to nepamatam presne, ale k tomuto konceptu som dosiel preto aby som nequeroval DB raz v handle a potom o chvilu v render metode a zaroven aby sa to nejako spravalo s a bez AJAXU.

A prosim te, proc tam mas: usleep(1500000); ?

gerades
Člen | 40
+
0
-

Kdyz tvorim AJAXovy odkaz, ktery ma neco nacist do html (po kliknuti), je tam potreba psat JS nebo se o propojeni postara Nette a {snippet} tag?

Nox
Člen | 378
+
0
-

gerades přepokládám proto aby se request nevykonal klasicky rychle, ale bylo chvílu vidět loadování

„Postará“…podle toho jak to bereš, je k tomu potřeba z principu JS, pokud ten soubor není ve staženém archivu, tak se tu koukni po jquery.nette.js, které to řeší

gerades
Člen | 40
+
0
-

Nox: diky za odpoved.

Ohledne JS: „Postará“ – myslim tim, jestli musim psat nejake specialni JS pro zpracovani jednoducheho AJAX tlacitka (kdyz neco naimportuju, tak to neberu, ze to musim psat…).
Snazim se rozjet jednoduchy AJAX link ktery updatne neco ve snipetu a porad se mi to nedari… :-)

Aurielle
Člen | 1281
+
0
-

Zkus kouknout na ten můj upravený sandbox, tam to funguje (tedy pokud využíváš staré snippety, s novými jsem to ještě nezkoušel).