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

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)

Foowie
Člen | 269
+
0
-

A co celou šablonu/layout obalit do makra {cache}{/cache} ?