[2009-03-27] V makrech {link …} a {include …} nepoužívejte array()

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

před 11 lety

David Grudl
Nette Core | 6889
+
0
-

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

před 11 lety

pmg
Člen | 372
+
0
-

. . . 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)}.

před 11 lety

David Grudl
Nette Core | 6889
+
0
-

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.

před 10 lety

xificurk
Člen | 119
+
0
-

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?

před 10 lety

_Martin_
Generous Backer | 680
+
0
-

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“.

před 10 lety

Jan Tvrdík
Nette guru | 2563
+
0
-

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.

před 10 lety

Patrik Votoček
Člen | 2249
+
0
-

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…

před 10 lety

_Martin_
Generous Backer | 680
+
0
-

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.

před 9 lety

blacksun
Člen | 181
+
0
-

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..

před 9 lety

blacksun
Člen | 181
+
0
-

Tak díky nakopnutí a po vyzkoušením aktuálně nejnovější verze 0.9.5 funguje v pohodě první zápis.