Vlastní makra pro CurlyBracketsFilter

- Petr Motejlek
 - Člen | 293
 
Ahoj,
v nejnovější revizi jsou makra vyseparována do samostatné třídy. Není
mi jasné, jak současný zápis
$curlyBracketsFilter->macros[‚mojemakro‘] = „BLEEEE“ převést do
nového systému.
Děkuji

- Petr Motejlek
 - Člen | 293
 
jasir napsal(a):
Předělával jsem svoje makra, stačí změnit
CurlyBracketsFilter::$defaultMacros['icon'] = 'mojemakro'naCurlyBracketsMacros::$defaultMacros['icon'] = 'mojemakro'. Fungujete to bez problémů.
Taky jsem na to přišel, ale myslel jsem, že je to špína, protože šahám do pole, kam podle názvu šahat nemám ;) Ale díky.

- Petr Motejlek
 - Člen | 293
 
David Grudl napsal(a):
Není to čisté, ale zatím asi jediné řešení.
Dobrý, hledal jsem něco hezčího a jsem rád, že jsem to nenašel.

- David Grudl
 - Nette Core | 8285
 
Tak už to tam je. Použije se navíc jen to ->handler.
	public function templatePrepareFilters($template)
	{
		$template->registerFilter($filter = new /*Nette\Templates\*/CurlyBracketsFilter);
		$filter->handler->macros['newmacro'] = ....
	}
				
- David Grudl
 - Nette Core | 8285
 
Ještě příklad. Pokud byste chtěli přidat například macro
{cycle ...}, obdobu toho na Smarty s následující syntaxí:
{foreach $people as $person}
	<li style="color:{cycle red, green}">{$person}</li>
{/foreach}
Můžete je buď zapsat do globálního statického pole
CurlyBracketsMacros::$defaultMacros:
CurlyBracketsMacros::$defaultMacros['cycle'] =
	'<?php $__cycle = %CurlyBracketsFilter::formatArray%; echo $__cycle[($iterator->getCounter() - 1) % count($__cycle)]; ?>';
Což však není čisté řešení (ovlivní to všechny cizí komponenty, je nejasné kdy to provést, …). Čisté řešení proto vede přes objektové pole $macros a provede se to při inicializaci filtrů:
public function templatePrepareFilters($template)
{
        $template->registerFilter($filter = new /*Nette\Templates\*/CurlyBracketsFilter);
        $filter->handler->macros['cycle'] =
		'<?php $__cycle = %CurlyBracketsFilter::formatArray%; echo $__cycle[($iterator->getCounter() - 1) % count($__cycle)]; ?>';
}