působnost proměnné v zanořeněm snippetu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oggy
Člen | 306
+
0
-

# PHP 5.3.3–1ubuntu9.3
# Apache/2.2.16 (Ubuntu)
# Nette Framework 2.0-dev (revision b017d8d released on 2010–12–31)

Mám dotaz ohledně platnosti proměnné ..

<?php
{snippet prvni}
	{var pocet => '5'}
	...nejaky html kod ...
		{snippet pocitadlo span}{$pocet}{/snippet}
{/snippet}
?>

vne snippetu pocitadlo počet zná.. uvnitř ale hlásí chybu Notice Undefined variable: pocet. Přehlížím někdě něco? Nebo je to očekávané chování?

bojovyletoun
Člen | 667
+
0
-

Ano, snippety mají k dispozici pouze globální proměnné šablony ($this->template->pepa). Když se překresluje snippet, tak se defakto provede pouze to co je uvnitř {snippet}. To umožňuje při ajaxovém požadavku odlehčit serveru zpracuje se pouze ta část, která je potřeba.
Pokud bychom chtěli ve snippetech i lokální proměnné z jiných bloků, tak by se musely zpracovávat i ostatní bloky, takže celá stránka. tak to bylo ve starých snippetech.

reference 1 2 3

Editoval bojovyletoun (17. 1. 2011 12:26)

medhi
Generous Backer | 255
+
0
-

Ahoj, pokud mám ale dva snippety, jeden vnořený do druhého a invaluduji ten nadřazený snippet, tak v tom vnořeném snippetu nevidím proměnnou, kterou jsem si vytvořil v tom nadřazeném snippetu. Proč, když se v tu chvíli invaliduje i ten nadřazený a není potřeba tahat ze serveru nic navíc?

bojovyletoun
Člen | 667
+
0
-

To jsem nezkoumal, ale myslím, že je to pořád tím, že snippety jsou pořád funkce, bez nějaké hiaerchické struktury(nejsou zanořené) a tudíž jsou izolované. Ale nejsem si jist, zda píšu to správně

David Grudl
Nette Core | 8218
+
0
-

Důvod je vlastně jediný: předcházet chybám „bez AJAXu to funguje, AJAX háže E_NOTICE“. Každý snippet je tedy scopem sám pro sebe, vždy, tím pádem když pak invaliduješ jednotlivý snippet, chová se stejně, jako když invaliduješ nadřazený nebo celou stránku.