predani promenne z basepresenteru do sablony
- hzs
- Člen | 4
Úplně jednoduchá věc asi…
Mám layout.latte a v něm jen toto:
{include header.latte}
{block content}{/block}
{include footer.latte}
v header.latte chci použít proměnnou např. $logged_in.
Jak tuto proměnnou dostat do toho šablonování aby byla k dicpozici kdykoli
kdekoli od header.latte do footer.latte ?
Jo, dokumentace je plná $template->variable = value. Ale odkud se to
$template bere?
A do jaké funkce basepresenteru to psát?
Tak, aby tam ta hodnota byla vždy ve všech presenterech i kdyby používaly
jiný layout? Prostě Ať jde o jakoukoli akci jakéhokoli presenteru
s libovolným layoutem, vždy bude k dispozici proměnná kterou si někde
nadefinuju. V basepresenteru postupy uváděné v dokumentaci jaksi
neprochází.
$this->template->variable = 1; neudělá nic
- hzs
- Člen | 4
BasePresenter.php:
<?php
namespace App;
use Nette, Model;
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public function berforeRender() {
parent::berofreRender();
$this->template->logged_in = 'ahoj';
}
}
?>
V header.latte:
nejake blbiny <b>{$logged_in}</b>
header.latte je includovany do @layout.latte
Vysledek:
Undefined variable: logged_in
Ladenka oznaci radek v cache
(../temp/cache/_Nette.FileTemplate/_templates.header.latte.php:18)
A tam je kod:
nejake blbiny <b><?php echo
Nette\Templating\Helpers::escapeHtml($logged_in,
ENT_NOQUOTES) ?></b>
- David Matějka
- Moderator | 6445
Oli tam mel hned 2× typo :) oboje ma byt samozrejme beforeRender
public function beforeRender() {
parent::beforeRender();
$this->template->logged_in = 'ahoj';
}
Editoval matej21 (18. 2. 2014 15:49)
- David Matějka
- Moderator | 6445
a za druhe, v konstruktoru neni jeste presenter pripraven. cokoliv chces v presenteru delat, delej nejdrive ve startup metode.
samozrejme sablona ($this->template
) je dostupna od startup,
pres action* a handle* metody az po beforeRender, render* a afterRender. ale
snaz se s template pracovat az v nektere render metode