Životní cyklus – jak cosi udělat
- Kcko
- Člen | 470
Ahoj, chci se zeptat jen teoreticky …:
V render<Cosi> mám k dispozici data. (V action ne a neřešme, že
to tam má být).
Pak v afterRender cosi ukládám a k nim uložíme i data
z render<Cosi>.
To je fajn, funguje. Nicméně máme k tomu ke všemu i komponentu, kterou vykreslujeme na stránce a která ukazuje data zpožděná o 1 krok / 1 interakci či jak to říci, protože se vykreslí dřív než než se data z <renderCosi> předají do renderAfter.
Moje otázka zní, lze nějak ovlivnit to kdy se komponenta vykreslí? (I když napadlo mě ted, že bych si mohl v renderAfter na komponentu hrábnout a říct jí něco jako
<?php
$this['mojeKomponenta']->uzSeMuzesVykreslit(TRUE);
?>
A v komponentě si interně ověřit jestli už tenhle pokyn dostala, bude to vůbec fungovat? Nemám ted možnost si to ted vyzkoušet, proto se ptám nahlas. Nebo lze to nějak lépe?
Editoval Kcko (4. 9. 2018 21:16)
- Ondřej Kubíček
- Člen | 494
a co je „afterRender/renderAfter“ ? to v životní cyklu není, protože předpokládám že to není klasicky render<View>, to už tam máš ten renderCosi
- Kcko
- Člen | 470
Ondřej Kubíček napsal(a):
a co je „afterRender/renderAfter“ ? to v životní cyklu není, protože předpokládám že to není klasicky render<View>, to už tam máš ten renderCosi
- CZechBoY
- Člen | 3608
Já bych si ty data ukládal do property. Ty data můžeš shánět třeba
metodou needData
, která naplní nějakou property pokud ještě
nebude naplněná. Tu metodu zase zavoláš buď z renderXXX nebo
v createComponentYYY.
No zajímalo by mě nakonec jestli může někdy dojít k tomu, že ty data
nepotřebuješ vůbec, protože se tímhle způsobem snažíš ušetřit drahé
tahání nějakých dat.
- Kcko
- Člen | 470
CZechBoY napsal(a):
Já bych si ty data ukládal do property. Ty data můžeš shánět třeba metodou
needData
, která naplní nějakou property pokud ještě nebude naplněná. Tu metodu zase zavoláš buď z renderXXX nebo v createComponentYYY.
No zajímalo by mě nakonec jestli může někdy dojít k tomu, že ty data nepotřebuješ vůbec, protože se tímhle způsobem snažíš ušetřit drahé tahání nějakých dat.
Věc se má takhle: někdo mě poprosil, abych mu pomohl s jistou
funkčnostní; jedná se o zobrazovaní online uživatelů na webu,
uživatel – stránka, kterou si prohlíží (včetně prokliku) + datum
a čas.
On má ten web udělaný tak, že má X presenterů a v nich pouze render metody (+ nějaký ten handle atd). Action metody nepoužívá. V render metodách získává data, načítá věci z DB, posílá do šablony atd.
Takže, aby se u tohoto způsobu dal zjistit nějaký jakože unikátní titulek každé stránky (detail produktu, výpis kategorie atd), tak jsem mu v BasePresenteru zavedl protected proměnnou $pageTitle, kterou naplním v každé renderMetodě.
Pak jediné místo kde můžu zaznamenat pohyb uživatele po webu a uložit si i ten titulek stránky, krom doplnění do všech renderMetod je afterRender – fajn, tak jsme to udělali.
Nicméně, jak jsem psal nahoře, já přijdu na web rovnou do nějakého detailu produktu a v tu chvíli se na webu jestě neukáže, že jsem já online a koukám na detail, protože výpis online uživatelů se uskuteční dřív, než dojde ke sběru dat a jeho uložení.
Teď je to jasné na co se ptám? (Kdyby se to udělalo tak, že v action metodě se získá titulek, v beforeRender dojde k uložení a trackingu uživatele, tak to není o ten 1 krok zpozděné).
Editoval Kcko (5. 9. 2018 9:49)
- David Matějka
- Moderator | 6445
výpis online uživatelů se uskuteční dřív, než dojde ke sběru dat a jeho uložení.
nikoliv, nazev je sice trochu matouci, ale afterRender se nevola po vykresleni, ale po zavolani render metody a pred vykreslenim. kde nacitas ten seznam online uzivatelu, ktery vypisujes?
Pak jediné místo kde můžu zaznamenat pohyb uživatele po webu a uložit si i ten titulek stránky
proc se nekouknes do $this->request
?
- Kcko
- Člen | 470
David Matějka napsal(a):
výpis online uživatelů se uskuteční dřív, než dojde ke sběru dat a jeho uložení.
nikoliv, nazev je sice trochu matouci, ale afterRender se nevola po vykresleni, ale po zavolani render metody a pred vykreslenim. kde nacitas ten seznam online uzivatelu, ktery vypisujes?
Pak jediné místo kde můžu zaznamenat pohyb uživatele po webu a uložit si i ten titulek stránky
proc se nekouknes do
$this->request
?
Ahoj Davide,
máš pravdu, podle https://api.nette.org/…ter.php.html#225 to tak je, takže to fungovat bude (já jsem mu ty úpravy jenom commitnul a pak jsem nad tím, už jen přemýšlel, a myslel jsem si, že to tak bude).
Bude to fungovat.
Kdy a kde se mám podívat do $this->request? Nebo co je tím míněno?
- Martk
- Člen | 661
@Kcko Předpokládám, že tohle je v administraci a opravdu ho zajímá, kde se právě on nachází/nacházel a zda je právě on online? To přece ví a ostatní uživatelé to zobrazí bez problému.
Nějaké řešení na to je, ale všechny co mě napadají jsou prasácké.
Editoval Martk (5. 9. 2018 10:19)
- Kcko
- Člen | 470
@Martk
Není, je to normálně na webu (je to defakto klon mého modulu z mého
webu, který není na Nette viz http://bit.ly/2LZ2qe4)
Ale asi to už nemusíme řešit. Řešení nejčistčího rázů je používat
Nette jak se má (Akce na data, Render na předání dat a nastavení šablon) a
pokud už je to tak jak to nyní je, tak to taky funguje, akorát jsem se mylně
domníval o nesprávné posloupci životního cyklu viz můj předchozí
příspěvěk a díky @DavidMatějka
- David Matějka
- Moderator | 6445
Kdy a kde se mám podívat do $this->request? Nebo co je tím míněno?
kdekoliv, treba ve startup. jde o to, aby si aktualni stranku nezjistoval z nejakeho page title, ale z aplikacniho requestu
- Kcko
- Člen | 470
David Matějka napsal(a):
Kdy a kde se mám podívat do $this->request? Nebo co je tím míněno?
kdekoliv, treba ve startup. jde o to, aby si aktualni stranku nezjistoval z nejakeho page title, ale z aplikacniho requestu
Aktuální stránkou míním určitou část aplikace, co zrovna dělá.
Takže to může vypadat takto:
- David Matějka si prohlíží Zápas mezi FC Barcelona a Realem Madrid v soutěži La Liga 2018–2019, 14:45
- Kcko si prohlíží Článek souhrn 19. kola tipovací soutěže, 14:42
.
.
.
Tyto „nadpisy“ = „titulky“ získáš skutečně až v nějakých action/render metodách většinou z databáze a nemají přesnou masku, takže v $requestu je nenajdu a nedají se zautomatizovat :-)
- Kcko
- Člen | 470
CZechBoY napsal(a):
Už v akci přece víš co zobrazuješ, ne?
Stejně mi přijde zbytečný zobrazovat co zrovna dělám já, to snad vidím, ne? :D
Modul online lidi co dělají na stránce. Viz link v předchozím postu. Mnohdy skládám „titulek“ dynamicky z několika výsledků z DB.
Už není o čem se dál bavit ne? :-) Myslím, že jsem to popsal jasně a dostatečně.