Tak trochu jiné makra v šablonách
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- trubi
 - Člen | 25
 
Ahojte, chtěl bych se zeptat, jestli existuje nějaký způsob, jak vytvořit makro, jehož obsah se při generování nejdříve provede a až výstup se potom vloží do šablony. Nevím, jestli to co píšu je srozumitelné, tak to raději ukážuna příkladu:
<?php
LatteMacros::$defaultMacros['mojemakro'] = '<?php echo nejaka_funkce(%%); ?>';
function nejaka_funkce($args) {
    return 'ahoj';
}
?>
v sablone:
<?php
<p>{mojemakro $args}</p>
?>
vystup (cachovana sablona), ktery nechci:
<?php
<p><?php echo nejaka_funkce($args) ?></p>
?>
vystup (cachovana sablona), ktery chci:
<?php
<p><?php echo 'ahoj'; ?></p>
?>
Těď už to určitě chápete. Jde takového chování docílit nějak
jednoduše?
Díky
Martin
?>

- jtousek
 - Člen | 951
 
LatteMacros::$defaultMacros['mojemakro'] = '<?php %nejaka_funkce% ?>';
Ta funkce by měla vypadat např. nějak takto:
function nejaka_funkce($s) {
	$latte = new LatteMacros();
	//příklad 1 - získání jednoho argumentu
	$arg = $latte->fetchToken($s);
	//příklad 2 - získání pole
	$array = $latte->formatArray($s);
	//čím se má %nejaka_funkce% nahradit v šabloně
	return 'echo "ahoj"';
}
EDIT:
Bohužel tohle není vůbec zdokumentované. Ač to používám tak nemohu říct, že bych to ovládal dokonale. Naučil jsem se to studováním zdrojových kódů Nette.
Editoval jtousek (14. 4. 2011 17:06)