snippety v includované šabloně
- Filip111
- Člen | 244
Ahoj, jak je to prosím se snippety v includované šabloně?
Četl jsem tu, že to na Nette 2.0 nefungovalo, pak zase že možná jo…jaký
je současný stav?
Mám jednoduchý kód v šabloně:
{snippet header}
<h1>Hello .... {ifset $AjaxPokus}{$AjaxPokus}{/ifset}</h1>
{/snippet}
Obsluhu signálu zajišťuji v presenteru následovně:
public function handleChangeHeader() {
$this->template->AjaxPokus = 'works';
$this->invalidateControl('header');
}
Pokud tento snippet umístím přímo do hlavní šablony
@layout.latte, funguje.
Pokud ho umístím do includovaného souboru detail.latte, nefunguje.
Nejedná se jen o include šablony – šablona edit.latte definuje blok
content a v něm je teprve include
šablony detail.latte, kde je opět definice bloku content. Viz níže:
edit.latte
{block #content}
<h1 n:block="title">Upravit sekci</h1>
{include 'detail.latte'}
{/block}
detail.latte
{block #content}
<a n:href="changeHeader!" class="ajax">Zmenit header</a>
{snippet header}
<h1>Hello .... {ifset $AjaxPokus}{$AjaxPokus}{/ifset}</h1>
{/snippet}
{control editForm}
{/block}
Mám blbě udělané šablony nebo je stále problém se snippety v includované šabloně?
Díky.
- ruff
- Člen | 11
Řeším teď velmi podobnou situaci. Můžete se prosím na to někdo znalejší mrknout?
Mám to následovně:
@layout.latte
<div>
{include #content}
</div>
@layout.modul.latte
{extends '../../templates/@layout.latte'}
{block #navigation}bla bla menu{/block}
{include #content}
edit.latte
{extends '../@layout.modul.latte'}
{block #content}
<a n:href="changeHeader!" class="ajax">Zmenit header</a>
{snippet header}
<h1>Hello .... {ifset $AjaxPokus}{$AjaxPokus}{/ifset}</h1>
{/snippet}
{/block}
presenter.php
public function handleChangeHeader() {
$this->template->AjaxPokus = 'works';
$this->invalidateControl('header');
}
Tedy, ajax funguje, když bych dal snippet do šablony 2. stupně, tedy do @layout.modul.latte. Pokud mám snippet tak jak píšu výše, tedy v šabloně 3. stupně (zanoření), tak ajax nefunguje, resp. ajaxový request nedostává zpět obsah, který se mu snažím dát pomocí $this->template ($this->template->AjaxPokus).
Zajímavé je, že pokud bych napsal v presenter.php
...
$this->invalidateControl();
...
tedy pokud bych neuvedl název snippetu, překreslí se logicky celá stránka a to včetně správné nové hodnoty proměnné $this->template->AjaxPokus, tedy „works“.
Díky za každou radu.
- Jan Mikeš
- Člen | 771
Konkretne se jedna o toto:
NejakyPresenter → default.latte:
{snippet anketa}{include '../anketa.latte'}{/snippet}
toto funguje, ale pokud ten snippet odstranim a cely obsah souboru anketa.latte obalim ve snippetu tak to nahle prestane fungovat.
Ve firebugu se tento snippet ani neprenese v get pozadavku
- doublemcz
- Člen | 15
Stále se to ještě děje. To ten bug po dvou letech nikdo nevyřešil/neopravil?
Lexi napsal(a):
Konkretne se jedna o toto:
NejakyPresenter → default.latte:
{snippet anketa}{include '../anketa.latte'}{/snippet}
toto funguje, ale pokud ten snippet odstranim a cely obsah souboru anketa.latte obalim ve snippetu tak to nahle prestane fungovat.
Ve firebugu se tento snippet ani neprenese v get pozadavku