působnost proměnné v zanořeněm snippetu
- Oggy
- Člen | 306
# 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
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.
Editoval bojovyletoun (17. 1. 2011 12:26)
- medhi
- Generous Backer | 255
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
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
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.