nette 2.4. předávání parametru do bloku
- tatyalien
- Člen | 239
Ahoj,
pomalu přecházím na 2.4 nette, ale nevím čím to je, ale nefunguje mě
předávání parametru do bloku (vždy je předaný parametr NULL):
{var $adminMenu = 'abasdfafaf'}
{include #testDefine menu => $adminMenu, x => 123}
{define #testDefine $menu, $x}
{dump $menu}
{dump $x}
menu: {$menu}<br />
x: {$x}
{/define}
zkusil jsem si pro jistotu stáhnout samostatně Nette-2.4–20170517 a tam mě to dělá totéž.
v tempu:
function blockTestDefine($_args)
{
extract($this->params);
list($menu) = $_args + [NULL, NULL,];
...
Editoval tatyalien (5. 6. 2017 15:06)
- David Matějka
- Moderator | 6445
teoreticky je to bug (nebo nedostatek), ale jde o to, ze kombinujes
dynamicke predavani argumentu (to
menu => $adminMenu, x => 123
) s definovanymi parametry u
define
. bud pouzij
{include #testDefine menu => $adminMenu, x => 123}
{define #testDefine}
nebo
{include #testDefine $adminMenu, 123}
{define #testDefine $menu, $x}
ale je pravda, ze i ten tvuj zapis by mohl fungovat. zalozis bug report na githubu?
- tatyalien
- Člen | 239
No ve starších verzích toto fungovalo. Každopádně:
{var $adminMenu = 'abasdfafaf'}
<p>{include #testDefine menu => $adminMenu, x => 123}</p>
<p>{include #testDefine $adminMenu, 123}</p>
<p>{include #testDefineB menu => $adminMenu, x => 123}</p>
{define #testDefine, $menu, $x}
{dump $menu}
{dump $x}
menu: {$menu}<br />
x: {$x}
{/define}
{define #testDefineB}
{dump $menu}
{dump $x}
menu: {$menu}<br />
x: {$x}
{/define}
výstup:
menu:
x:
menu: abasdfafaf
x: 123
menu: abasdfafaf
x: 123
takže přestalo jen fungovat pojmenovávání předávaných parametrů…
a vygenerovaný template:
function blockTestDefine($_args)
{
extract($this->params);
list($menu, $x) = $_args + [NULL, NULL, ];
Tracy\Debugger::barDump(($menu), '$menu');
Tracy\Debugger::barDump(($x), '$x');
?> menu: <?php echo LR\Filters::escapeHtmlText($menu) /* line 44 */ ?><br>
x: <?php echo LR\Filters::escapeHtmlText($x) /* line 45 */ ?>
<?php
}
function blockTestDefineB($_args)
{
extract($_args);
Tracy\Debugger::barDump(($menu), '$menu');
Tracy\Debugger::barDump(($x), '$x');
?> menu: <?php echo LR\Filters::escapeHtmlText($menu) /* line 51 */ ?><br>
x: <?php echo LR\Filters::escapeHtmlText($x) /* line 52 */ ?>
<?php
}
Editoval tatyalien (6. 6. 2017 7:07)
- David Matějka
- Moderator | 6445
on totiz v drivejsi verzi nette zapis
{define #testDefine, $menu, $x}
respektive ty argumenty menu a x byly ignorovany a bylo to same jako
{define #testDefine}
v nette 2.4 se tak nechavaji predat „definovane parametry“ nebo jak to pojmenovat, takze tvuj zapis prestal fungovat (jelikoz to pred tim bylo zbytecne a dg nepredpokladal, ze by se neco mohlo rozbit)
- tatyalien
- Člen | 239
Ještě koukám, že v dokomentaci je info: https://latte.nette.org/cs/tags#…, že se to má vkládat:
{include sidebar, id => 123, name => $value}
Tak se mě spíš zdá, že je to bug…
Editoval tatyalien (7. 6. 2017 8:32)
- David Matějka
- Moderator | 6445
tak znovu: ten zapis funguje a vzdy fungoval; jen se pred tim nikdy
nezapisovaly ty parametry do {define}
. od 2.4 je mozny
novy zapis
{define foo, $bar}
{include #foo, 'value'}
jen tento zapis neni uveden v doc.
- tatyalien
- Člen | 239
Ano napsal jsi to správně: {define foo, $bar} a jede ti zápis {include #foo, ‚value‘}, ale dle dokumentace má jet i zápis {include #foo, bar ⇒ ‚value‘} ale ten už nejede…
David Matějka napsal(a):
tak znovu: ten zapis funguje a vzdy fungoval; jen se pred tim nikdy nezapisovaly ty parametry do
{define}
. od 2.4 je mozny novy zapis{define foo, $bar} {include #foo, 'value'}
jen tento zapis neni uveden v doc.