Provedení stejné funkce v každé render metodě(zjištění nových zpráv)
- Tomas Trdla
- Člen | 19
Zdravím,
už delší dobu si lámu hlavu nad tím, jak udělat, aby se určitá funkce
provedla ze všech koutů aplikace.
Mám systém zpráv mezi uživateli a chci, aby v navigaci u odkazu na mailbox
svítilo kolik nových zpráv danému uživateli přišlo a refreshovalo se to
při každém načtení jakkékoliv stránky v aplikaci.
Určitě by to šlo zapsat do každé render metody, což mi ale přijde docela těžkopádné a hádám, že to jde udělat lépe. Říkal jsem si např přes BasePresenter, ale nevím jak.
Jak získat počet nových zpráv není problém, spíš odkud a přes jakou metodu zapsat do template proměnné.
- David Matějka
- Moderator | 6445
ahoj,
ano, base presenter muze byt resenim. pouzij treba beforeRender, viz zivotni
cyklus presenteru
pripadne si na to muzes napsat komponentu :)
- Tomas Trdla
- Člen | 19
Když zkusím následující kus kódu
abstract class BasePresenter extends Nette\Application\UI\Presenter {
public function beforeRender() {
parent::beforeRender();
$this->template->NewMsgCountTopNav = "1";
}
}
tak mi tracy vyhodí chybu i na dumpu
{dump $NewMsgCountTopNav}
že danou proměnnou nezná
a Homepage mi dědí z presenteru obecně
class HomepagePresenter extends Nette\Application\UI\Presenter {
.
.
Editoval Tomas Trdla (17. 11. 2017 16:23)
- Tomas Trdla
- Člen | 19
tak už jsem si odpověděl sám… stačilo změnit dědičnost presenteru z obecného na BasePresenter
class HomepagePresenter extends BasePresenter {
.
.