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)