Provedení stejné funkce v každé render metodě(zjištění nových zpráv)

Tomas Trdla
Člen | 19
+
0
-

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
+
0
-

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
+
0
-

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
+
+1
-

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 {
.
.