Snippet vo vnútri foreach, if, while, …

- timbulko
 - Člen | 85
 
Zdravím,
Potreboval by som vytvoriť určitý počet snippetov (podľa počtu riadkov
v tabuľke) a tieto podľa užívateľovej akcie prekreslovať. Neprišiel som
však zatiaľ na spôsob ako na to, pretože pri použití snippetu
v akomkoľvek cykle alebo podmienke mi to vždy vypíšte parse error. Dokonca
aj pri jednoduchom použití:
{if true}
  {snippet test}{/snippet}
{/if}
Nevedel by niekto poradiť ako na to?
Vďaka.

- buff
 - Člen | 63
 
Děkuji za otázku i za odpovědi, to se mi zrovna bude hodit. :-)
Řeším ale triviální problém, vždy se mi překreslují všechny snippety. Poradíte mi prosím, kde dělám chybu?
Šablona My.default.phtml:
{snippet raz}raz{/snippet}
{snippet dva}dva{/snippet}
<a class="ajax" href="{link change!}">změň</a>
Presenter MyPresenter.php:
<?php
class MyPresenter extends Presenter
{
        public function handleChange() {
                $this->invalidateControl('dva');
        }
}
?>
Přenesená data:
{"state":[],"snippets":{"__raz":"raz","__dva":"dva"}}
Chtěl bych:
{"state":[],"snippets":{"__dva":"dva"}}
				
- jasir
 - Člen | 746
 
Zkus:
<?php
class MyPresenter extends Presenter
{
        public function handleChange() {
		$this-validateControl();
                $this->invalidateControl('dva');
        }
}
?>
Mohlo by to fungovat.
Když je komponenta cílem signálu, invaliduje se (a tím i její
snippety). Už tu na fóru zazněly návrhy aby se tak nedělo, ale zatím to
myslím nebylo implementováno. Jinak možná má ještě smysl to asi obalit do
nějaké
podmínky if(Environment::getHttpRequest()->isAjax()) {...invalidate...}

- David Grudl
 - Nette Core | 8285
 
V novém režimu chování ($oldLayoutMode = FALSE) se
automaticky už neinvaliduje.