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)