Parametrové pole linku v curlyBrackets

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

Robí mi to niečo takéto:
Pri linku:
{plink default, array(‚param‘ ⇒ 1}

V tempe všetko ok:

<?php echo $template->{$_cb->escape}($presenter->link("$destination", array('param' => 1))) ?>

Ale keď je v premennej pole:

// $arr = array('param' => 1)
{plink default, $arr}

V tempe mi to už dáva tak ako by som nechcel:

<?php echo $template->{$_cb->escape}($presenter->link("$destination", array($arr))) ?>

Myslím, že to sem už aj niekto písal. Nedala by sa pridať podmienka, že ak je parameter pole tak ho nedá do array, alebo to naruší nejaký zámer, napr. odosielanie poli ako parameter?

Ale neumrem ak to nepôjde, zatiaľ sa to dá poriešiť cez {$presenter->link($destination, $arr)}.

kravčo
Člen | 721
+
0
-

Jod napsal(a):

Robí mi to niečo takéto:
Pri linku:
{plink default, array(‚param‘ ⇒ 1}

V tempe všetko ok:
<?php echo $template->{$_cb->escape}($presenter->link(„$destination“, array(‚param‘ ⇒ 1))) ?>

Ale keď je v premennej pole:
// $arr = array(‚param‘ ⇒ 1)
{plink default, $arr}

V tempe mi to už dáva tak ako by som nechcel:
<?php echo $template->{$_cb->escape}($presenter->link(„$destination“, array($arr))) ?>

Myslím, že to sem už aj niekto písal. Nedala by sa pridať podmienka, že ak je parameter pole tak ho nedá do array, alebo to naruší nejaký zámer, napr. odosielanie poli ako parameter?

Toto sa na úrovni curlybrackets nedá urobiť, keďže v momente prekladania šablóny hodnoty premenných nie sú známe, známe sú až pri vykonávaní preloženej šablóny…

Ale neumrem ak to nepôjde, zatiaľ sa to dá poriešiť cez {$presenter->link($destination, $arr)}.

Jod
Člen | 701
+
0
-

Vidíš, to je pravda :D

David Grudl
Nette Core | 8227
+
0
-

mělo by fungovat {plink default, array() + $arr}, ale je to divné. V Ruby lze psát např method(1, 2, *['a', 'b']), možná by se podobně dalo povolit {plink default, *$arr}.

Jod
Člen | 701
+
0
-

Ale ruby si nekaká do piesočku ako to robí php =D . S tou hviezdičkou by to šlo.

David Grudl
Nette Core | 8227
+
0
-

Upravil jsem chování filtru, takže je možné používat {plink default, $arr}. Vedlejším efektem ale je, že nebude fungovat {plink default, array('param' ⇒ 1)}, bude potřeba psát pouze {plink default, 'param' ⇒ 1}. Filtr na to upozorní varováním.

_Martin_
Generous Backer | 679
+
0
-

Ahoj, nevím, zda je chyba u mě nebo se něco pochroumalo v Nette, ale v nejnovější revizi (464) je tento bug zase. Nevím, kdy přesně se objevil. Ukázkový kód:

// presenter
$pages[] = (object) array(
	'name' => $this->page->name,
	'destination' => ':' . $this->name . ':' . $this->action,
	'args' => array('pageId' => $this->page->id),
);
<!-- šablona -->
<li>{ifCurrent $page->destination $page->args}<strong>{else}<a href="{link $page->destination $page->args}">{/if}{$page->name}{ifCurrent $page->destination $page->args}</strong>{else}</a>{/if}</li>