Vložení proměnných do @layout.latte

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

Ahoj. Nevíte, jak vložit do šablony @layout.latte proměnné z presenteru? Každé view má svůj presenter, ale @layout jej nemá, alespoň pokud se nemýlím.

enumag
Člen | 2118
+
0
-

BasePresenter::beforeRender()

fary
Člen | 155
+
0
-

Funguje to. Díky :-)

frosty22
Člen | 373
+
0
-

A jenom pro upřesnění, tak samozřejmě můžeš i do layoutu vložit z action / render … je to vše jeden objekt v property presenteru $template :)

Ale právě abys nemusel duplikovat kod a vkládat stejné proměnné v každé action / render metodě, tak se vkládají v beforeRender, metoda která je volaná před samotný vykreslením.

Vesměs životní cyklus (pořadí volaných metod presenteru při requestu na něj):

  • startup()
  • action*()
  • handle*()
  • beforeRender()
  • render*()
  • afterRender()
  • shutdown()

Viz https://api.nette.org/…ter.php.html#158

fary
Člen | 155
+
0
-

OK. Díky za info. :-)

h4kuna
Backer | 740
+
0
-

enumag napsal(a):

BasePresenter::beforeRender()

Někde na fóru, kdysi dávno, jsem viděl že je lepší to dávat do BasePresenter::createTemplate().

Když zapomeneš napsat parent::beforeRender() tak si toho hned nemusíš všimnout, ale když zapomeneš parent::createTemplate() tak si toho všimneš okamžitě. Což můžu jedině potvrdit.

Editoval h4kuna (13. 8. 2013 20:25)

frosty22
Člen | 373
+
0
-

Tak podle mě si všimneš i u beforeRender rychle, jelikož ti to vyhodí nějaký notice s neexistující proměnnou, leč je tedy pravda, že ti to nemusí hned dojít.

A jinak oproti createTemplate, tak beforeRender má minimálně tu výhodu, že právě nemusíš zavolat parenta, když máš třeba jiný layout pro nějaký „specialní“ presenter.