Cache kompletního html výstupu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- colek
- Člen | 59
ahoj, našel jsem způsob ukládání celého html výstupu, bohužel mi to ale nefunguje.
při prvním nahrání stránky se zobrazí vše poněku zvláštně. Ukáže
se správně celý výstup a po </html> následuje Nette red screen :)
InvalidStateException – Template file name was not specified.
s tím že to ukazuje na $this->template->render();
nevíte jak to rozumně rozchodit?
díky
použitý kód v base presenteru…
private $cacheKey;
public function startup()
{
parent::startup();
// vytvoříme cache ve jmenném prostoru 'application/output'
// (jméno prostoru je libovolný řetezec)
if (CACHE_PAGES == true){
$cache = Environment::getCache('application/output');
// klíčem bude třeba jméno presenteru a view + obsah parametru id
$key = array($this->getAction(TRUE), $this->getView(), $this->request->params);
// ověření, zda je položka v keši
if (isset($cache[$key])) {
echo $cache[$key]; // vypsat a finíto
$this->terminate();
} else {
ob_start();
$this->cacheKey = $key;
}
}
}
public function shutdown($response) {
if (CACHE_PAGES == true){
if (isset($this->cacheKey)) {
$this->template->render();
$output = ob_get_flush();
Nette\Environment::getCache('application/output')->save($this->cacheKey, $output, array('expire' => time() + 60 * 30));
}
}
parent::shutdown($response);
}
Editoval colek (11. 4. 2011 22:58)