snippetArea, předávání proměnných do inkludované šablony

Semik
Backer | 129
+
0
-

Zdravím,

aktualizuji jeden projekt z Nette 2.3 na 2.4 a mám problém s přenášením proměnných deklarovaých v šabloně do inkludované šablony, která je obalena do snippetArea.

{var $freeTrans = $isFreeTransport($price->number())}

{snippetArea wrapperDetails}
	{include '_details.latte'}
{/snippetArea}
{*_details.latte*}
{if $freeTrans}
...

Vyskočí notice a $freeTrans nezná.
Nenašel sem v návodu pro migraci, že by toto měl být bc break.
Nefunguje ani explicitní předání parametru do include:

{var $freeTrans = $isFreeTransport($price->number())}

{snippetArea wrapperDetails}
	{include '_details.latte', freeTrans => $freeTrans}
{/snippetArea}

protože už ve vygenerovaném wrapperu ta proměnná při extract není, aby se mohla předat.
Předělat všechny takto deklarované proměnné z šablony do presenteru je nyní docela komplikované.

Díky za radu.

David Grudl
Nette Core | 7540
+
+1
-

Mě dost zaráží, že by tohle ve 2.3 fungovalo. Není možné, že se to bere odjinud?

Semik
Backer | 129
+
0
-

No to by byla velká náhoda, je tam asi 10 snippetArea.
Takže zamýšlený use case to není. Je nějaký pattern jak toto dělat správně ? Použít snippetAreu až uvnitř include je asi jedno, odstíní to proměnné stejně a nebude mi fungovat ajax, min. ne tak jak jej tam mám nyní.

Polki
Člen | 445
+
0
-

Opravdu to tak ve 2.3 bylo.
Pamatuju se, že jsem to používal na pár projektech, ale jak to pak nefungovalo, tak jsem to všechno předělal.
Teď už include nepoužívám.

Michal Kumžák
Člen | 106
+
0
-

Já to používám tak, že když includuji uvnitř snippetArea, tak ten include je sám snippet, takže pak invaliduji jak snippetAreu, tak ten snippet uvnitř. A takhle mi to funguje.

hlavni.latte

{snippetArea hlavni}
	{include vedlejsi.latte}
{/snippetArea}

vedlejsi.latte

<div n:snippet="vedlejsi">
	.....
	.....
</div>

a invalidace

$this->redrawControl('hlavni');
$this->redrawControl('vedlejsi');