Latte: Další parametry blokových maker
- danik
- Člen | 56
Ahoj,
je nějaká cesta jak předat další parametry blokovým makrům? Například:
...
{_}This is a very long English paragraph which
needs to be translated to your native language.
The purpose of it being so long is to give
a good example of what a long paragraph of text
looks like. And also, we'd like to show you
this link: <a href="//%s">%s</a>{/_'en.wikipedia.com', 'English Wikipedia!'}
...
Tenhle konkrétní příklad s překladačem je přesně to co momentálně řeším; ano, asi by v tomto případě bylo čistší rozbít překládaný text na víc volání podtržítkových překládacích maker, ale to prostě nejde. Nejde mi o to „sprintf-like“ nahrazování placeholderů ve stringu, jde mi o překlad toho bloku Latte kódu na:
...
<?php ob_start(); ?>
This is a very long English paragraph ...
...</a>
<?php echo $template->translate(ob_get_clean(), 'en.wikipedia.com', 'English Wikipedia!') ?>
...
dík předem :o) četl jsem si docela dost zdrojáky vestavěnejch Nette MacroSetů a prostě jsem to z toho nevykoukal…
- danik
- Člen | 56
Ještě doplním: čtením zdrojáků jsem odvodil něco takového:
public function macroTranslate(MacroNode $node, PhpWriter $writer)
{
if ($node->closing) {
return $writer->write('echo %modify($template->translate(ob_get_clean(), %node.args))');
} elseif ($node->isEmpty = ($node->args !== '')) {
return $writer->write('echo %modify($template->translate(%node.args))');
} else {
return 'ob_start()';
}
}
což je až na přidané „%node.args
“ na čtvrtém řádku
úplně stejné, jako původní makro translate z CoreMacros. To by nejspíš
fungovalo splendidně, kdyby ovšem všechny volání překládacího makra
měly nějaké parametry, což se ale přirozeně stát nemusí. Takže vlastně
to o co mi jde je nějaká dokumentace MacroNode a PhpWriteru, abych je mohl
správně použít a vyřešit s jejich pomocí například tento
problém :o)
Editoval danik (8. 4. 2013 14:04)