Přidání vlastního makra → vkládají se uvozovky
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Darkry
- Člen | 101
Zdravím,
mám takový problém s přidáváním vlastního makra. Snažím se rozchodit takovýto kód:
$set->addMacro('js', 'echo \'<script type="text/javascript" src="' . $this->template->basePath . '/DA/js/%node.word.js"></script>\'; ');
který pak v šabloně používám takto {js ahoj}.
Problém je v tom, že po zkompilování šablony mám v HTML něco takového:
<script type="text/javascript" src="blabla/DA/js/"ahoj".js"></script>
Jsou tam tedy ty uvozovky navíc, samozřejmě by se jich šlo zbavit například pomocí funkce trim, ale to mi přijde zbytečné. Není nějaké lepší řešení?
Díky
Edit:
takto je to funkční, ale neni to nic moc:
$set->addMacro('js', 'echo \'<script type="text/javascript" src="' . $this->template->basePath . '/DA/js/\' . trim(%node.word, \'"\') . \'.js"></script>\'; ');
Editoval Darkry (7. 3. 2012 21:11)

- Filip Procházka
- Moderator | 4668
Tys totiž nepochopil, že placeholdery %node.* jsou pro PHP
kód. Když pominu fakt, že tohle makro je úplně zbytečné, správně bys ho
měl napsat cca takto:
$set->addMacro('js', function ($node, $writer) {
return $writer->write('?><script type="text/javascript" src="' .
'<?php echo %escape($basePath . "/DA/js/" . %node.word); ?>' .
'.js"></script><?php');
});

- Darkry
- Člen | 101
Díky za odpověď.
Ale k tomu tvému kódu mám ještě dva dotazy (doufám, že tě tím moc neotravuju) :)
- Proč tam na začátku a na konci musí být to
?>a<?php?- vyřešeno (viz. předchozí příspěvek)
- Co přesně dělá ten placeholder (pokud to říkám dobře)
%escape. Respektive chápu (podle zkompilované šablony, že volá funkciNette\Templating\Helpers::escapeHtml, ale proč tam musí být?- edit: Je to jen obyčejné escapování proti XSS.
Díky moc!
Editoval Darkry (9. 3. 2012 18:32)