Latte makra {link} a {plink}

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dcepelik
Člen | 36
+
0
-

Zdravím,

narazil jsem na následující zvláštní chování makra {link}, resp. {plink}. V jedné velmi jednoduché webové aplikaci předávám strukturu navigace (jednorozměrné asociativní pole) jako proměnnou do layoutu:

<?php

$this->template->menuLinks = array(
	'O nás' => 'Page:view about-us');

?>

V layoutu se potom generují odkazy následujícím způsobem:

<?php

<ul>
	<li n:foreach="$menuLinks as $title => $link">
		<a n:href="$link">{$title}</a>
	</li>
</ul>

?>

Zde narážím na problém. Pro $link == "Page:view about-us" skončí generování odkazu chybou.

Příčinou je zřejmě vlastní návrh Latte makra. To obsah atributu n:href zpracuje následujícím způsobem:

  • vše až do mezery nebo čárky je $destination,
  • zbytek jsou parametry.

Makro však nevyhodnotí obsah proměnné $link, ale proměnnou $link jako takovou. Sestaví se tedy tento PHP fragment:

<?php

$presenter->link($link);

?>

Nenašel jsem způsob, jak toto jednoduše a elegantně vyřešit.

Je toto žádoucí chování? Pokud ano, proč? Dost mě to překvapilo, proto bych se rád dobral rozřešení.

Pěkný večer všem

David Grudl
Nette Core | 8228
+
0
-

Je to podobné, jako očekávat, že bude fungovat tento kód:

$a = 'foreach ($items';

$a as $val) {
	echo $val;
}
dcepelik
Člen | 36
+
0
-

David Grudl napsal(a):

Je to podobné, jako očekávat, že bude fungovat tento kód:

$a = 'foreach ($items';

$a as $val) {
	echo $val;
}

Díky, neuvědomil jsem si, že $link a vlastní makro jsou ve stejném kontextu.