Detekce použitých maker v šabloně
- jzapletal
- Člen | 5
Zdravím, dělám na projektu který nevyužívá celý Nette FW, ale jen některé části.
Před vyrenderováním šablony, potřebuji detekovat, zda-li je v ní
použito makro {bundle}.
Káždé použité {bundle} makro následně uložit do kolekce
i se specifikovanými hodnotami.
Teprve potom renderovat šablonu.
Latte a registrace makra
$latte_engine = new Latte\Engine;
$macro_set = new MacroSet($latte_engine->getCompiler());
$macro_set->addMacro('bundle', function ($node, $writer){
return $writer->write('dump([%node.args])');
});
// TODO: něco takového
// dump($latte_engine->getUsedMacros());
$latte_engine->render( __DIR__ . '/myDir/@homepage.latte', $param);
Použití v šabloně
{bundle variable, homepage.nav.top, extra => [myFirstParam => NULL, mySecondParam => 10]}
- GEpic
- Člen | 566
jzapletal napsal(a):
Zdravím, dělám na projektu který nevyužívá celý Nette FW, ale jen některé části.
Před vyrenderováním šablony, potřebuji detekovat, zda-li je v ní použito makro {bundle}.
Káždé použité {bundle} makro následně uložit do kolekce i se specifikovanými hodnotami.Teprve potom renderovat šablonu.
Latte a registrace makra
$latte_engine = new Latte\Engine; $macro_set = new MacroSet($latte_engine->getCompiler()); $macro_set->addMacro('bundle', function ($node, $writer){ return $writer->write('dump([%node.args])'); }); // TODO: něco takového // dump($latte_engine->getUsedMacros()); $latte_engine->render( __DIR__ . '/myDir/@homepage.latte', $param);
Použití v šabloně
{bundle variable, homepage.nav.top, extra => [myFirstParam => NULL, mySecondParam => 10]}
To před renderem šablony neuděláš, protože před renderem latte_engine neví, kolik jich tam bude, to až metoda render potom nahradí {bundle…} za php kód.
Můžeš si ale před renderem projet obsah souboru se šablonou funkcí
preg_match_all
která ti vrátí počet vyhovujících záznamů
(tedy počet maker)
Z hlavy:
$file = file_get_contents(__DIR__ . '/myDir/@homepage.latte');
$count = preg_match_all('~\{(bundle)([^\n]*)\}~'}, $file);
Editoval GEpic (27. 8. 2016 13:01)
- jzapletal
- Člen | 5
Napadlo mě to samé. Ale ještě by mě zajímalo, jak latte přistupuje ke {component}, když používám celý nette.
Když vlastně někde v šabloně zavolam {component myComponent}, tak se před renderem provede její logika.
Co si matně pamatuji, tak se provede teprve tehdy, když je komponenta {component myComponent} volána v šabloně.