Parametrové pole linku v curlyBrackets

Upozornění: Tohle vlákno je hodně staré.

před 11 lety

Jod
Člen | 703
+
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)}.

před 11 lety

kravčo
Člen | 723
+
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)}.

před 11 lety

Jod
Člen | 703
+
0
-

Vidíš, to je pravda :D

před 11 lety

David Grudl
Nette Core | 6928
+
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}.

před 11 lety

Jod
Člen | 703
+
0
-

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

před 11 lety

David Grudl
Nette Core | 6928
+
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.

před 10 lety

_Martin_
Generous Backer | 680
+
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>