Progressbar aneb vypisovani stavu zpracovani

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

Zdravim,

mam ve sve aplikaci dve metody, jejichz zpracovani muze trvat delsi cas (az nekolik sekund). Chtel bych tedy, aby se pred samotnym zavolanim techto funkci jiz vykreslila stranka a zobrazila alespon informaci o tom, ze prave probiha proces ten ci onen a zobrazila animovany gif nebo tak neco, aby uzivatel vedel, ze se neco deje.

Tusim, ze se bude jednat o praci s funkcemi ob_start() a ob_flush(), ale nejak nejsem schopen prijit na to, jak toho dosahnout.

Pomohl by nekdo prosim?

Patrik Votoček
Člen | 2221
+
0
-

http://php.net/flush ale není to moc spolehlivé

Editoval vrtak-cz (25. 6. 2010 16:30)

blacksun
Člen | 177
+
0
-

Případně tento kus stránky natahovat až po načtení např. layoutu pomocí ajaxu..

o5
Člen | 416
+
0
-

Pred ajaxovym pozadavkem hodis javascriptem tocitko a po requestu tocitko odeberes…

2bfree
Člen | 247
+
0
-

vrtak-cz napsal(a):

http://php.net/flush ale není to moc spolehlivé

Ano, přesně o tento typ řešení mi jde. Jenomže nevím, kde to mám přesně volat. Zkoušel jsem v prezenteru okolo těch funkcí, které chci volat, ale nevypíše mi to šablonu.

Rozhodně to nechci dělat ani JS ani AJAXem, ale hezky pěkně přes ob_funkce, ale nevím jak dosáhnout toho, abych vykreslil šablonu těsně před </body>, pak zavolal ty metody co jim to trvá, že by se jeden zvencnul a pak teprve dokreslil šablonu.

Patrik Votoček
Člen | 2221
+
0
-

Obávám se že je to v rozporu se životním cyklem presenteru.

Mikulas Dite
Člen | 756
+
0
-

Tak můžeš vypsat progress bar a nechat šablonu v klidu dokreslit, potom vypočítat data a udělat redirect na zobrazení toho vygenerovaného obsahu.

odin
Člen | 50
+
0
-

Rozhodně to nechci dělat ani JS ani AJAXem, ale hezky pěkně přes ob_funkce, ale nevím jak dosáhnout toho, abych vykreslil šablonu těsně před </body>, pak zavolal ty metody co jim to trvá, že by se jeden zvencnul a pak teprve dokreslil šablonu.

Obavam se, ze to je v rozporu s principem HTML stranky. Stranka by mela koncit </html>, nikde neni receno, ze prohlizec musi vykreslovat nekompletni stranku. ob_flush udela jen to, ze prohlizeci posle nejaka data (tj. pokud se nezavola ob_flush() tak se echo odesle az po dokonceni skriptu). Je to uzitecne k tomu, ze se da zrychlit nacitani stranky (mezitim co se generuje kus stranky, tak se jiz dalsi kus odesila) a k usetreni pameti (odeslana data se muzou vyhodit z pameti) a k dalsim vecem. Kazopadne nic nenuti ty data prohliec zobrazovat, radsi pocka az na HTTP 200. Jedine pekne/ciste reseni je bud jak psal Mikulas Dite nebo pres AJAX.

Tharos
Člen | 1029
+
0
-

2bfree napsal(a):

Rozhodně to nechci dělat ani JS ani AJAXem, ale hezky pěkně přes ob_funkce

Asi je to věc názoru, ale tato věta mi zní skoro jako kdyby někdo řekl: „Rozhodně to nechci dělat v nějakém MVC, ale chci to mít hezky pěkně procedurálně.“ :) Mně osobně AJAXové řešení připadá elegantní a řešení přes výstupní buffer jako vyloženě nevhodné (v dnešní době).

Editoval Tharos (1. 7. 2010 13:20)