Latte makro s vnitřní cache

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

Chci si napsat makro na kompresi javascriptu (a css). Samozřejmě není vhodné vždy kompilovat znovu takže toto makro potřebuje uvnitř používat nějakou cache. Navíc potřebuji použít vlastní cacheStorage.

Problém je, že nevím, kudy ten cacheStorage do toho makra dostat aby to bylo správně. A pokud bych ten storage vytvářel přímo někde v kódu makra, tak mám stejný problém se zjištěním cesty k %tempDir%. Jaký je podle vás správný postup?

OndrejSlamecka
Člen | 41
+
0
-

V template je cache storage uložená v proměnné $netteCacheStorage. Dostane se tam takto https://api.nette.org/…rol.php.html#79. Do vlastního makra ji pak můžeš předat třeba tímto způsobem https://api.nette.org/…cro.php.html#64https://api.nette.org/…cro.php.html#98

Editoval OndrejSlamecka (21. 6. 2012 19:04)

jtousek
Člen | 951
+
0
-

Jak už jsem psal předtím, potřebuji použít vlastní cacheStorage (tedy ne ten výchozí). Ještě dodám že tento storage nelze používat globálně pro jiné účely.

Editoval jtousek (21. 6. 2012 19:07)

OndrejSlamecka
Člen | 41
+
0
-

Aha, tak úplně stejně jako to dělá Nette? Do template si předat $customCacheStorage (např. v createTemplate v BasePresenteru).

(Jako „vlastní cacheStorage“ jsem předtím pochopil takovou, která přepisuje službu cacheStorage z Nette, ne takovou, která by tvořila zcela vlastní (jinak pojmenovanou) službu.)

Editoval OndrejSlamecka (21. 6. 2012 19:17)

jtousek
Člen | 951
+
0
-

To mě napadlo, ale rád bych to měl jako v knihovnu a tohle znamená závislost navíc – požadavek na volání něčeho v presenteru. Pokud nikoho nenapadne nic lepšího tak to tak holt udělám.

Edit: Aha. Měl jsem na mysli vlastní poděděné cache storage s drobnou úpravou pro daný případ.

Editoval jtousek (21. 6. 2012 19:18)

Milo
Nette Core | 1283
+
0
-

@jtousek:
Podědil bych MacroSet a přepsal finalize(). Pokud bude storage stále stejné, tak asi cca takto:

public function finalize()
{
	return array(
		'$_myOwnCache = new Cache(new MyStorage)',
		''
	);
}

Editoval Milo (22. 6. 2012 12:12)