Latte nezná macro {cache}
- Karel_243
- Člen | 9
Ahoj,
chci stránku vykreslit jen pomocí Latte s využitím cache a autoloaderu
z Nette. Mám tak nějak všechno nastavené, vytvořenou složku temp i se do
ní vytvoří nějaký soubor, ale laděnka mi hlásí chybu, že nezná macro
{cache}:
Latte\CompileException
Unknown macro {cache} in sablony/obsah…html:8
index.php
require __DIR__ . '/Nette/loader.php';
Tracy\Debugger::enable();
// Configure application
$configurator = new Nette\Config\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__ . '/tridy')
->register();
$tpl = new Latte\Engine();
$tpl->setTempDirectory(__DIR__ . '/temp');
$web = new tridy\Uvod();
$tplVars['obsah'] = $web->getParametry();
$tplVars['test_cache'] = 'test';
$tpl->render('sablony/obsah.html', $tplVars);
obsah.html
{extends 'web.html'}
{block obsah}
<main>
<p>a já jsem obsah</p>
{$obsah}
{cache $test_cache}
<p>a já obsah v keši</p>
{/cache}
<main>
{/block}
- Karel_243
- Člen | 9
Děkuji, ale skončil jsem zase u jiné chyby:
Argument 1 passed to Nette\Bridges\CacheLatte\CacheMacro::createCache()
must implement interface Nette\Caching\IStorage, null given, called in…
line 16
<p>a já jsem obsah</p>
14: <?php echo Latte\Runtime\Filters::escapeHtml($obsah, ENT_NOQUOTES) ?>
15:
16: <?php if (Nette\Bridges\CacheLatte\CacheMacro::createCache($netteCacheStorage, 'sg7xnjn6t1', $_g->caches, array($test_cache))) { ?>
17: <p>a já obsah v keši</p>
18: <?php $_l->tmp = array_pop($_g->caches); if (!$_l->tmp instanceof stdClass) $_l->tmp->end(); } ?>
public static function createCache(Nette\Caching\IStorage $cacheStorage, $key, & $parents, array $args = NULL)
$cacheStorage NULL
$key "sg7xnjn6t1" (10)
$parents NULL
$args array (1)
0 => "test" (4)
Nevím, jestli to pomůže, ale pro vytvoření instance CacheMacro ji volám s celou cestou, jinak mi to nejde:
$tpl->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($tpl->getCompiler()));
- Zax
- Člen | 370
$tpl->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($tpl->getCompiler()));
===
use Nette\Bridges\CacheLatte\CacheMacro;
$tpl->addMacro('cache', new CacheMacro($tpl->getCompiler()));
Namespaces v PHP fungují strašně jednoduše, nechápu, že je to tady jeden z nejčastěji řešených problémů…
- David Kudera
- Člen | 455
@Karel_243 promiň, nechci určitě rýpat, ale spíš bych řekl, že nevíš… use se používá aktuálně, rozhodně ne předtím, než byly namespace. Právě tím use totiž řekneš, jaká namespace se má použít (ostatní využití use teď neřeším). Předtím by to ani nefungovalo..
No a k příspěvku trochu výše, tak namespace není žádná cesta. To může být max tak cesta souboru, ale to není to stejné jako namespace ;-)
- David Matějka
- Moderator | 6445
to makro vyzaduje, aby v parametru sablony netteCacheStorage
bylo nejake cache storage. Takze pri vykreslovani treba
$latte->render(..., array(
....,
'netteCacheStorage' => new Nette\Caching\Storages\FileStorage('adresar'),
));