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 | 8228
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 | 8228
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)]; ?>';
}