[2009-03-27] V makrech {link …} a {include …} nepoužívejte array()
- David Grudl
- Nette Core | 8218
Několikrát se na fóru objevil požadavek na odkazování ve tvaru
{link default, $arr}
, kde parametry jsou uloženy v poli
$arr
. Tohle nefungovalo podle očekávání. Od revize 240 je
problém vyřešen, ale jako vedlejší efekt bylo nutné zrušit zbytečné
leč tolerované obalování parametrů do polí (tj. třeba
{plink default, array('param' ⇒ 1)}
).
Prohledejte prosím kód šablon na řetězec array(
a výskyty
jako {plink default, array('param' ⇒ 1)}
nahraďte za
{plink default, 'param' ⇒ 1}
. Totéž platí pro makra link,
ajaxlink nebo include.
úprava je jako obvykle zpětně kompatibilní a na staré použití upozorňuje varováním
- pmg
- Člen | 372
. . . jako vedlejší efekt bylo nutné zrušit zbytečné leč tolerované obalování parametrů do polí . . .
Je to proto, aby pole mohlo být jedním z parametrů odkazované funkce?
Taková změna by ale zpětně kompatibilní nebyla. Mluvím o stavu, kdy by
byly ekvivalentní zápisy {link default array(1, 2)}
a
{link default 0 => array(1, 2)}
.
- David Grudl
- Nette Core | 8218
Jj, cílem je, aby tyto zápisy byly ekvivalentní. Změna je zpětně kompatibilní v tom smyslu, že když je na začátku ‚array‘, tak to vyhodí warning a funguje postaru.
- _Martin_
- Generous Backer | 679
xificurk napsal(a):
Tak nevím jestli se náhodou něco nezměnilo, ale…
{plink this, $params}
se mi přeloží na
<?php echo TemplateHelpers::escapeHtml($presenter->link('this', array($params))) ?>
Jde nějak plink makru předat parametry jako pole?
Nejde, neboť v současné době není v Nette logika, která by dokázala rozpoznat, zda předané pole je „polem parametrů“ a nebo „jedním konkrétním parametrem typu pole“.
- Jan Tvrdík
- Nette guru | 2595
Nejde, neboť v současné době není v Nette logika, která by dokázala rozpoznat, zda předané pole je „polem parametrů“ a nebo „jedním konkrétním parametrem typu pole“.
Ta logika tam není, protože to nijak poznat nelze. Pokud potřebuji použít pole parametrů, tak je potřeba si vytvořit vlastní makro.
- Patrik Votoček
- Člen | 2221
Na PS se tohle řešilo a asi to do budoucna bude tak že přibude makro (nebo se změní aktuální fungování některého z maker) které bude určené právě na toto…
- _Martin_
- Generous Backer | 679
Jan Tvrdík napsal(a):
Ta logika tam není, protože to nijak poznat nelze. Pokud potřebuji použít pole parametrů, tak je potřeba si vytvořit vlastní makro.
Ono v té šabloně by to i šlo, například zápisem *$pole
,
ale co jsme se bavili s Davidem na PS, tak on by rád, aby to makro bylo
ekvivalentní funkci link
v presenteru – a tam už něco
takového udělat nejde.
Otázka je, jestli někdo používá jako parametr pole – kdyby ne, mohla by se možnost dát pole jako parametr zrušit. Ale možná to je hloupost.
- blacksun
- Člen | 177
Ahoj,
dopadlo tohle nějak?
Pokouším se zapsat v šabloně pomocí makra link odkaz na akci z jiného presenteru, které chci předat několik parametrů typu string a jeden parametr typu pole, což se mi nedaří.
Zkoušel sem zápis
<?php
{link :presenter:akce, 'par1'=>'hod1', 'par2' => array('id1'=>'val1', 'id2'=>'val2')}
?>
i
<?php
{var args => array('par1'=>'hod1', 'par2' => array('id1'=>'val1', 'id2'=>'val2')) }
{$presenter->link(':presenter:akce', $args)}
?>
případně i co jsem našel s hvězdičkou
<?php
{var args => array('par1'=>'hod1', 'par2' => array('id1'=>'val1', 'id2'=>'val2')) }
{link :presenter:akce, *$args}
?>
ale nikdy se mi ten odkaz nevygeneruje správně s tím polem..