Jak vyrenderovat šablonu i s makry
- chikeet
- Člen | 160
Zdravím, upgraduju CMS z verze 2.0 beta na 2.0.10 a nemůžu přijít na to, jak vyrenderovat šablonu včetně maker.
Mám třídu StringTemplate, která dědí z Nette\Templating\Template. Ta má vlastní atribut $content a metodu render:
public function render()
{
$this->setSource($this->content);
$cache = new Nette\Caching\Cache($storage = $this->getCacheStorage(), 'StringTemplate');
$key = md5($this->content);
$cached = $compiled = $cache->load($key);
if ($compiled === NULL) { // not cached
$compiled = $this->compile();
$cache->save($key, $compiled, array(Nette\Caching\Cache::CONSTS => 'Nette\Framework::REVISION'));
$cached = $cache->load($key);
}
$this->__set('template', $this);
if ($cached !== NULL && $storage instanceof Caching\Storages\PhpFileStorage) {
Nette\Utils\LimitedScope::load($cached['file'], $this->getParameters());
} else {
Nette\Utils\LimitedScope::evaluate($compiled, $this->getParameters());
}
}
V kódu, kde používám StringTemplate, mám tohle:
$template = new StringTemplate();
$template->presenter = Nette\Environment::getApplication()->getPresenter();
$template->registerFilter(new \Nette\Latte\Engine);
$template->setSource($html);
$html = $template->__toString();
Problém je v tom, že __toString() vrací prázdný řetězec. Napadá někoho, v čem může být chyba?
(Pokud jde o Environment, vím, že je deprecated a mám v plánu ho nahradit hned, jak to pojede.)
- chikeet
- Člen | 160
Nakonec to byla úplně primitivní chyba. Stačilo z metody render odstranit řádek
$this->setSource($this->content);
protože v kódu, kde používám StringTemplate, už atribut content
nepoužívám a tak byl logicky prázdný.
Řádek
$this->__set('template', $this);
se ukázal jako zbytečný, takže taky pryč, odstranila jsem atribut content, aby byl úklid kompletní, a už to funguje.
(Někdy je fakt nejlepší se na to vyspat :-))