nette 2.4. předávání parametru do bloku

tatyalien
Člen | 239
+
0
-

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)

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkusil bych {include #testDefine $adminMenu, 123}

David Matějka
Moderator | 6445
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

Ok, tak projdu skládání šablon a odstraním pojmenovávání parametrů při předávání.

tatyalien
Člen | 239
+
0
-

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
+
0
-

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
+
0
-

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.

David Matějka
Moderator | 6445
+
0
-

jede, jen nesmis mit {define foo, $bar} ale jen {define foo}