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
+
0
-

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
+
0
-

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
+
0
-

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) :)

  1. Proč tam na začátku a na konci musí být to ?> a <?php?
    • vyřešeno (viz. předchozí příspěvek)
  2. Co přesně dělá ten placeholder (pokud to říkám dobře) %escape. Respektive chápu (podle zkompilované šablony, že volá funkci Nette\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)