Registrace vlastného makra
- semtex.989
- Člen | 75
Dá se nějakým jednoduchým a lazy způsobem zaregistrovat vlastní
makro?
Narazil jsem pouze na několik slepých uliček:
Zkoušel jsem akci navázat na createTemplate() v presenteru, ale to ještě není vytvořen CB na Latte filtr.
Pokud podědím metodu createTemplateFilters, tak to taky nejde, protože Latte filtr sice už je v události onPrepareFilters třídy Template, ale jen jako callback, takže ho nemůžu vytvořenému makru předat.
Jediný způsob by asi byl podědit metodu getTemplate(), ale to zas není
příliš čísté.
Navíc je k parseru krkolomný přístup přes
$template->filters[0]->parser (navíc by mohl být jiný index pole).
- semtex.989
- Člen | 75
Tak tu kuchařku jsem nenašel.
Stejně je to ale docela blbě, když ta třída nevolá rodiče (aby se Latte
neregistrovalo 2x).
Ale jiný způsob jak se dostat k instanci Latte parseru mě nenapadá.
Když v basePresenteru budu chtít registrovat jedno makro a v jeho potomkovi zase další jiné makro, tak budu muset kopírovat i kód všech rodičů a DRY je v háji..
- Jan Tvrdík
- Nette guru | 2595
Tak si nad tím napiš nějakou abstrakci, ne?
public function templatePrepareFilters(Nette\Templating\Template $tpl)
{
$latte = new Nette\Latte\Engine;
$this->setupLatte($latte);
$tpl->registerFilter($latte)
}
protected function setupLatte(Nette\Latte\Engine $latte)
{
$set = Nette\Latte\Macros\MacroSet::install($latte->parser);
$set->addMacro('@src', 'echo \'src="\' . $template->dataStream(%node.word) . \'"\' ');
}
- semtex.989
- Člen | 75
Leda tak. Sice to bez náhrady přepisuje rodiče, ale není to tak
krkolomné.
Na příští Sobotě máš u mně kofolu :)