Oddělelní cache adresáře pro šablony

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

Ahoj,

v BasePresenteru dědím funkci createTemplate tak, abych mohl oddělit výsledek LatteFilteru do oddělených adresářů:

<?php
protected function createTemplate() {
	$template = new FileTemplate;

        $dir = Environment::getVariable('tempDir') . '/' . $this->language . '/';
        umask(0000); @mkdir($dir, 0777);

	$template->setCacheStorage( new FileStorage( $dir ) );
...
}
?>

To by fungovalo – generuje mi to hezky adresáře v cachi podle jazyka. Problém ale je, že v šablonách používám macro {cache}…{/cache}. Výsledek jejich cachování ale jde přímo do tempDir, nezávisle na jazyku. Výsledek je ten, že cache pro jednu jazykovou mutaci se akceptuje i pro druhou mutaci. Jak vnutím tomuto makru, aby používalo také adresáře závislé na jazyce?

Díky

kravčo
Člen | 721
+
0
-

Používaj vylepšené makro {cache}...{/cache} s parametrom:

{cache $lang}
Hello world!
{/cache}
knyttl
Člen | 196
+
0
-

Já to do teď měl takhle:

<?php
{cache "Events.$lang"}
...
{/cache}
?>

a tak to do teď fungovalo. Jak jsem ty šablony ale oddělil do adresářů, tak ta hlavní cache si asi myslí, že už vše bylo nacachované a udržuje jen první nacachovanou verzi (tedy jednu z cs nebo en, ale nikdy ne obě).

kravčo
Člen | 721
+
0
-

divím sa, že ti nové riešenie vôbec funguje…

-$template = new FileTemplate;
+$template = parent::createTemplate();

Nette templejty interne nepoužívajú FileStorage, ale PhpFileStorage… Myslím, že si zbytočne komplikuješ život, vŕtaš do vnútorných vecí Nette. Čo, myslím, v tomto prípade vôbec nie nutné…

knyttl
Člen | 196
+
0
-

Já právě zkopíroval a pak postupně změnil celý obsah originálního Control::createTemplate, ve kterém je new FileTemplate. Tohle je určitě v pohodě – jen jde o to, jak Latte vnutit, aby používal stejný storage…

Editoval knyttr (28. 4. 2011 22:24)

knyttl
Člen | 196
+
0
-

Pro jistotu jsem to tedy ještě vyzkoušel s parent::createTemplate, ale chování úplně stejné.