Vlastní makra pro CurlyBracketsFilter

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr Motejlek
Člen | 293
+
0
-

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

jasir
Člen | 746
+
0
-

Předělával jsem svoje makra, stačí změnit CurlyBracketsFilter::$defaultMacros['icon'] = 'mojemakro' na CurlyBracketsMacros::$defaultMacros['icon'] = 'mojemakro'. Funguje to bez problémů.

Editoval jasir (22. 7. 2009 12:25)

Petr Motejlek
Člen | 293
+
0
-

jasir napsal(a):

Předělával jsem svoje makra, stačí změnit CurlyBracketsFilter::$defaultMacros['icon'] = 'mojemakro' na CurlyBracketsMacros::$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.

David Grudl
Nette Core | 8228
+
0
-

Není to čisté, ale zatím asi jediné řešení.

PetrP
Člen | 587
+
0
-

CurlyBracketsMacros mělo chvilku nestatickou property public $macro která se plnila self::$defaultMacro ale mohl jsem si jí změnit jen pro určitou instanci, to se mi zdála rozumná cesta, jakto že to zmyzelo?

Petr Motejlek
Člen | 293
+
0
-

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
+
0
-

Nezmizelo, to je vývojová větev a některé věci se vyvíjejí.

David Grudl
Nette Core | 8228
+
0
-

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
+
0
-

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