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 :)