Snippety a inkludovana šablona
#1 před 2 lety
- dakota
- Člen

- Registrovaný: 18. 1. 2010
- Příspěvky: 163
Snippety a inkludovana šablona
Neviem či je to chyba alebo je to len nedoriešené. Vo najnovšej vývojovej verzii pri použití snippetu v inkludovanej šablone nedôjde k prekresleniu snippetu pri ajaxovom volaní. Ak tento snippet premiestnim do neinkludovanej šablony prekreslenie funguje v poriadku. Pred odstranením zavináčov to išlo aj v inkludovaných šablonách.
#2 před 2 lety
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Snippety a inkludovana šablona
Můžeš prosím ověřit, že už je to v pořádku?
#3 před 2 lety
- dakota
- Člen

- Registrovaný: 18. 1. 2010
- Příspěvky: 163
Re: Snippety a inkludovana šablona
V najnovšej revízii NetteFramework-2.0dev z 15.11. to nejde.
Vo vrátenom JSON chýba premenná snippets.
Uvádzam aj zjednodušený kod. Ak je snippet vo vloženej šablone @form.phtml tak sa neprekreslí,
ak ho dam do šablony add.phtml | edit.phtml za kod include tak prekreslenie snippetu funguje v poriadku.
content šablona add.phtml | edit.phtml
{block #content}
{include '@form.phtml'}
inkludovaná šablona @form.phtml
javascript - jQuery
...
{snippet person}
... {$person->name} ...
{/snippet}
...
v presenteri
public function handlePerson($person_id)
{
$this->template->person = ... // načitanie z databázy
$this->invalidateControl('person');
}
Vyskušal som osobitne v inej šablone jednoduchý snippet či nerobím chybu niekde ja, ale tiež nefunguje snippet ak je vo vloženej šablone:
{snippet time}{=time()}{/snippet}
$this->invalidateControl(‚time‘)
Editoval dakota (15. 11. 2010 8:36)
#4 před 2 lety
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Snippety a inkludovana šablona
Aha, už rozumím. Akorát mě nenapadá, jak to řešit, protože
{block #content} se nevykonává a tudíž ani {snippet
person} se nedohledá. Popřemýšlím.
#5 před 2 lety
- romansklenar
- Moderator

- Registrovaný: 20. 7. 2008
- Příspěvky: 780
Re: Snippety a inkludovana šablona
Není podmínkou, že snippet musí být uvnitř includované šablony.
I když snippet obaluje makro {include}, tak se nic neincludne
(makro se nevykoná). Ve vráceném payloadu je pak jen
<div></div>.
# show.phtml
{snippet}
<div>{include 'members.phtml'}</div>
{/snippet}
Nette e1a3fa8 released on 2010–11–15, PHP 5.3.3
#6 před 2 lety
- arron
- Nette guru

- Registrovaný: 1. 10. 2008
- Příspěvky: 449
Re: Snippety a inkludovana šablona
romansklenar napsal(a):
Není podmínkou, že snippet musí být uvnitř includované šablony. I když snippet obaluje makro
{include}, tak se nic neincludne (makro se nevykoná). Ve vráceném payloadu je pak jen<div></div>.
Hehe, tak to vysvetluje to zvlastni chovani, ktere uz par dni pozoruju, ale zatim jsem se nepustil do toho to resit…
Mno ale to asi neni uplne dobre, ze se to takhle chova…snad Davida napadne nejaka spasna myslenka, ja se sice kouknu do implementace, ale pochybuju ze pochopim, jak to vlastne funguje :-D
#7 před rokem
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Snippety a inkludovana šablona
Potvrzuju bug s include, řešení ale zabere víc času.
#8 před rokem
- KillPrd
- Začátečník

- Registrovaný: 20. 7. 2010
- Příspěvky: 103
Re: Snippety a inkludovana šablona
Jde to nějak řešit jinak než se vyřeší tenhle bug?
#9 před rokem
- dakota
- Člen

- Registrovaný: 18. 1. 2010
- Příspěvky: 163
Re: Snippety a inkludovana šablona
KillPrd napsal(a):
Jde to nějak řešit jinak než se vyřeší tenhle bug?
Zatiaľ používať snippet len v content šablone a nedávať ho do inkludovanej šablony.
V prípade:
{block #content}
{include '@form.phtml'}
ak je snippet vo @form.phtml a @form.phtml sa používa pre action add aj edit, tak si v action add a tiež action edit nastaviť $this->setView(‚form.phtml‘); a doplniť do form.phtml {block #content}
Editoval dakota (21. 12. 2010 9:05)
#10 před rokem
- Chbox
- Člen

- Registrovaný: 22. 12. 2009
- Příspěvky: 136
Re: Snippety a inkludovana šablona
KillPrd napsal(a):
Jde to nějak řešit jinak než se vyřeší tenhle bug?
Taky jsem se s tím teď mořil a naštěstí jde to obejít dedičností
šablon, kde si udělaš pro danný presenter nějakou master šablonu která
musí zase dědit od hlavního layoutu. Do ní hodíš ten obsah toho půvpdně
includovaného souboru (předpokládám, že je to nějaký společný kód pro
více pohledů, např. interní menu presenteru) a zbytek šablon extenduješ na
týhle šabloně.
P.S.: Nezapomeň zapsat název šablony do uvozovek.
{layout '../@layout.latte'} //v dokumentaci se uvádí zápis bez uvozovek
#11 před rokem
- bojovyletoun
- Nette guru

- Registrovaný: 6. 10. 2010
- Příspěvky: 672
Re: Snippety a inkludovana šablona
Nebude problém právě v tom, že nette se nemá jak dostat k blokům, které jsou v include? Zkoumá při invalidaci snippetu i ty snippety které jsou ve vřazených blocích(include)..
PS:
- když mám top šablonu (která nedědí) a chci v ní blok pouze definovat a nikoliv i zároveň vypsat, jak to udělám?
- Co v dokumentaci znamená „Každá stránka musí definovat všechny bloky, které layout makrem {include} načítá (a sám je nedefinuje).“
Nette 2dev from github/Netbeans 7.0.1/(Tortoise)git/
Apache 2.4/fcgid/PHP 5.3.9+xdebug+wincache
#12 před rokem
- Chbox
- Člen

- Registrovaný: 22. 12. 2009
- Příspěvky: 136
Re: Snippety a inkludovana šablona
ad 1) ho nech prázdný myslím
ad 2) pokud includeješ do hlavní šablony blok {include #menu} musí být ve
všech potomcích {block #menu}{/menu}
#13 před rokem
- bojovyletoun
- Nette guru

- Registrovaný: 6. 10. 2010
- Příspěvky: 672
Re: Snippety a inkludovana šablona
1). nemohu ho nechat prázdný(možná jsem špatně použil slovo defonovat), když chci, aby v něm byl nějaké obsah. Který pak někde jinde použiju (třeba víckrát, s růzmými paramatry)… Komponenty mi na to přijdou nevhodné (kvůli problém v šabloně se „vracet“ zpátky" do php a presenterům).
Taky by to šlo vyřešit použitím include v layoutu a definicí toho bloku v child šabloně. Jenže mi to přijde nepohodlné.
Nette 2dev from github/Netbeans 7.0.1/(Tortoise)git/
Apache 2.4/fcgid/PHP 5.3.9+xdebug+wincache
#14 před rokem
- Chbox
- Člen

- Registrovaný: 22. 12. 2009
- Příspěvky: 136
Re: Snippety a inkludovana šablona
no, musí se u toho docela přemejšlet :-) ale asi myslíš tohle, ne?
http://doc.nette.org/…er/dedicnost#…
#15 před rokem
- honzajavorek
- Člen

- Registrovaný: 16. 10. 2005
- Příspěvky: 62
Re: Snippety a inkludovana šablona
Koukám, že na GitHubu má ten bug nejvíc hlasů. Pohlo se to někam? Taky mi to dnes večer přistřihlo křidýlka :(
#16 před rokem
- Vyki
- Nette guru

- Registrovaný: 12. 7. 2009
- Příspěvky: 436
Re: Snippety a inkludovana šablona
# show.phtml {snippet} <div>{include 'members.phtml'}</div> {/snippet}
Netestovali jste někdo jestli už to v betě jde?
http://ie6funeral.com – Kill IE6 ! ! !
#17 před rokem
- bojovyletoun
- Nette guru

- Registrovaný: 6. 10. 2010
- Příspěvky: 672
Re: Snippety a inkludovana šablona
Testoval a nejde.
Nette 2dev from github/Netbeans 7.0.1/(Tortoise)git/
Apache 2.4/fcgid/PHP 5.3.9+xdebug+wincache
#18 před rokem
- Jan Tvrdík
- Nette guru

- Registrovaný: 13. 4. 2008
- Příspěvky: 1262
Re: Snippety a inkludovana šablona
Mělo by to už být opravené.
#19 před rokem
- dakota
- Člen

- Registrovaný: 18. 1. 2010
- Příspěvky: 163
Re: Snippety a inkludovana šablona
funguje:
{snippet members}
<div>{include 'members.phtml'}</div>
{/snippet}
snippet umiestnený v inkludovanej šablone:
// šablona add.phtml
{block #content}
{include '@form.phtml'}
// šablona @form.phtml
{snippet person}
... {$person->name} ...
{/snippet}
zatial nefunguje
Editoval dakota (3. 6. 2011 18:54)
#20 před rokem
- HosipLan
- Nette guru

- Registrovaný: 1. 6. 2009
- Příspěvky: 2637
Re: Snippety a inkludovana šablona
A není čistě náhodou, přesně na tohle {includeblock
'@form.phtml'} ?
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
Online
#21 před rokem
- dakota
- Člen

- Registrovaný: 18. 1. 2010
- Příspěvky: 163
Re: Snippety a inkludovana šablona
HosipLan napsal(a):
A není čistě náhodou, přesně na tohle
{includeblock '@form.phtml'}?
Ono to nefunguje ani s includeblock.
#22 před rokem
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Snippety a inkludovana šablona
Mohlo by pomoci invalidovat snippet, v němž je includeblock.
#23 před 11 měsíci
- Neklan
- Člen

- Registrovaný: 9. 3. 2011
- Příspěvky: 21
Re: Snippety a inkludovana šablona
David Grudl napsal(a):
Mohlo by pomoci invalidovat snippet, v němž je includeblock.
No ale to nic nevyřeší, ono funguje obnovení celé includnuté šablony, ale když potřebuji v šabloně jen nějaký menší kus takto znovunačíst, tak jsem nahranej. Dá se to tedy nějak obejít, nebo vyřešit, aby to fungovalo?
#24 před 11 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
nemuzu si pomoct ale nefunguje me ani
{snippet members}
<div>{include 'members.phtml'}</div>
{/snippet}
pokud je umisten v sablone komponenty, pri klasickem dotazu vse OK, pri ajaxu a invalidaci cele komponenty se snippet vyrenderuje bez includu… (posledni dev. verze Nette)
Editoval crempa (27. 6. 2011 10:39)
#25 před 11 měsíci
- stenly
- Nový člen

- Registrovaný: 11. 4. 2011
- Příspěvky: 2
Re: Snippety a inkludovana šablona
crempa napsal(a):
nemuzu si pomoct ale nefunguje me ani
{snippet members} <div>{include 'members.phtml'}</div> {/snippet}pokud je umisten v sablone komponenty, pri klasickem dotazu vse OK, pri ajaxu a invalidaci cele komponenty se snippet vyrenderuje bez includu… (posledni dev. verze Nette)
Mám naprosto stejný problém máte někdo řešení? Zkoušel jsem {include ‚soubor‘} i čistě php include a taky nezabralo
#26 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
dědičnost šablon to řeší..
#27 před 11 měsíci
- stenly
- Nový člen

- Registrovaný: 11. 4. 2011
- Příspěvky: 2
Re: Snippety a inkludovana šablona
22 napsal(a):
dědičnost šablon to řeší..
A odkaz na nějaký příklad by nebyl jsem z toho krapet zmatenej. Díky
#28 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
zkus tady, nová
dokumentace o dědičnosti nic neví asi.
Chvíli to trvá, než to pochopíš, ale vyplatí se…
V kostce..co inkludujes jako file udelas jako {block} a nastavis správný extends…
Editoval 22 (30. 6. 2011 12:57)
#29 před 11 měsíci
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Snippety a inkludovana šablona
Samozřejmě že to tam je http://doc.nette.org/…fault-macros#…
#30 před 11 měsíci
#31 před 9 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
22 napsal(a):
dědičnost šablon to řeší..
Muzu se zeptat jak to resi v pripade, ze jeden soubor includuju v jedne sablone vicekrat a pokazde s jinymi parametry a navic v cyklu tudiz dopredu nemuzu stanovit konkretni oznaceni bloku?
priklad: v bunce datagridu potrebuju includovat nejaky komplexnejsi vypis dany samostatnou sablonou…
Editoval crempa (2. 9. 2011 19:15)
#32 před 9 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
up: nikdo nevi? :(
#33 před 9 měsíci
- polonium
- Člen

- Registrovaný: 29. 6. 2011
- Příspěvky: 20
Re: Snippety a inkludovana šablona
Čistě teoreticky.
Bylo by možný obejít tenhle bug tím, že by ten soubor, který chceme
includovat načetli v presenteru? Vlastně by to mohlo fungovat na
podobném principu jako se načítají views.
Tohle:
{snippet members}
<div>{include 'members.phtml'}</div>
{/snippet}
Udělat takhle:
{snippet members}
<div>{block members}</div>
{/snippet}
A v presenteru:
$this->template->members = $template->setFile('members.phtml');
Napadlo mě to když jsem koukal do dokumentace na práci s ajaxem. Hned nad popisem invalidace snippetu se píše o html šablonách.
#34 před 9 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
teorie neověřená praxí je k ničemu :-)
#35 před 9 měsíci
- polonium
- Člen

- Registrovaný: 29. 6. 2011
- Příspěvky: 20
Re: Snippety a inkludovana šablona
Ale úplně nesmyslnej nápad to není, že? Jsem právě doufal, že se toho někdo chytne a vyzkouší to místo mě… Jsou tu zkušenější lidi v nette než já…
Editoval polonium (3. 9. 2011 10:42)
#36 před 9 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
@crempa: a co to udělat přes vlastní control, kterýmu pošleš ty parametry?
{control datagridCell $params}
tedy problematické makro include je fuč..
#37 před 9 měsíci
#38 před 9 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
@ondřej: v komponentě bych jen podle parametru vzal
správnou šablonu, snippet bych tam vůbec neřešil, jen bych do něj obalil
ten control v hlavní šabloně. Nebo víc render metod a dalo by se volat
{control datagridCell:template1}. Blbost?
#39 před 9 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
@22 dik za zajimavy napad, sice to asi odporuje KISS a vsem tem podobnym
zkratkam :) ale reseni by to asi bylo…
rikam asi, protoze tomu brani dalsi bug zminovany Ondrejem, ja si do te
komponenty nejsem schopen poslat vubec zadne parametry, navic pri ajaxu havaruje
i volani jine metody nez render()
#40 před 9 měsíci
- Nox
- Nette guru

- Registrovaný: 16. 10. 2010
- Příspěvky: 319
Re: Snippety a inkludovana šablona
@OndřejMirtes je to ještě aktuální? V nové verzi
Nette mám normálně {control someControl:neco $argument,
$argument} a to třeba uvnitř jinýho controlu a funguje to i s AJAXem
bez problému (vím že to dřív nejelo)
edit: no fakt to asi nejede, asi jsem řešil něco trochu jiného
Editoval Nox (30. 9. 2011 14:03)
#41 před 9 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
@Nox me to teda stale nefunguje, argumenty se nepredaji
#42 před 8 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
Ahoj, nastin docasneho (funkcniho) reseni k diskusi – tvorba vlastniho
makra ainclude, ktere se pouzije namisto klasickeho includu
do beforeRender() v nejakem base presenteru prasknout
$latte = new LatteFilter();
$t = new FileTemplate();
$t->setCacheStorage(new FileStorage(Environment::getVariable('tempDir')));
$t->presenter = $this;
$t->user = $this->getUser();
$t->baseUri = $t->baseUrl = rtrim(Environment::getHttpRequest()->getUrl()->getBaseUrl(), '/');
$t->registerFilter($latte);
$t->registerHelperLoader('TemplateHelpers::loader');
$this->template->it = $t;
$macroSet = new MacroSet($latte->parser);
$macroSet->addMacro(
'ainclude',
'$it->setFile(Environment::expand(%node.word)); $it->render()'
);
$this->template->registerFilter($latte);
a v sablone pak uz jen klasicky
{ainclude '%appDir%/templates/submenu.phtml'}
kod zatim neresi vlozeni atributu do sablony, ale to by nemel byt problem dopsat, pouziti v komponente je obdobne jen se to vrazi do nejakeho render v default controlu treba
uvedene reseni me funguje, ale strelil jsem to znacne od boku takze prosim o pripadnou revizi nebo navrhy jak to doladit :)
#43 před 5 měsíci
- Achse
- Člen

- Registrovaný: 28. 6. 2009
- Příspěvky: 12
Re: Snippety a inkludovana šablona
@crempa: díky zdá se že to funguje celkem dobře jediné co jsem musel udělat bylo:
new LatteFilter() → new \Nette\Latte\Engine()
Nejsem si jistý korektností této úpravy. Mám totiž potíže uvnitř
šablony kterou vkládám s věcmi jako jsou proměnné, ty se zdají vyřešit
přes $presenter->variable, s čím si však nevím rady je
Notice: Undefined variable: control ({control
registrationForm})
Kde dělám prosím chybu?
Stahl jsem nejnovější dev verzi a ozkoušel, stejné. Nette Framework 2.0-beta (revision 7f6bc92 released on 2011–12–07)
Editoval Achse (7. 12. 2011 15:18)
Mann made hell, haven is only for elected!
#44 před 5 měsíci
- crempa
- Nette guru

- Registrovaný: 21. 8. 2008
- Příspěvky: 208
Re: Snippety a inkludovana šablona
namespace revize drive uvedeneho reseni vcetne funkcnich parametru, jedine omezeni oproti originalu je nefunkcni makro control ve kterem je ten bug zda se… netestovano na poslednim monster updatu :-)
pouziti uplne stejne jako u klasickeho include, az bude bug opraven staci udelat v celem projektu rename z {ainclude na {include
$latte = new Nette\Latte\Engine();
$templ = new \Nette\Templating\FileTemplate();
$templ->setCacheStorage(new \Nette\Caching\Storages\FileStorage(Environment::getVariable('tempDir')));
$templ->presenter = $this;
$templ->user = $this->getUser();
$templ->baseUri = $templ->baseUrl = rtrim(Environment::getHttpRequest()->getUrl()->getBaseUrl(), '/');
$templ->registerFilter($latte);
$templ->registerHelperLoader('TemplateHelpers::loader');
$this->template->it = $templ;
$macroSet = new Nette\Latte\Macros\MacroSet($latte->parser);
$macroSet->addMacro(
'ainclude',
'
$path = pathinfo($presenter->template->getFile());
$path = $path["dirname"] . "/" . %node.word;
$it->setFile($path);
$it->setParams(%node.array);
$it->render();
'
);
$this->template->registerFilter($latte);
Editoval crempa (17. 12. 2011 22:42)
#45 před 5 měsíci
- henry
- Nový člen

- Registrovaný: 10. 6. 2011
- Příspěvky: 1
Re: Snippety a inkludovana šablona
Ahojte!
právě jsem dořešil obdobný problém, kdy se nepřenášela includovaná šablona ve snippetu.
Šablona
{snippet list}
{for $i = 0; $i < count($list); $i++}
<h1>Agáta Hanychová se otrávila jídlem. Celé dny jenom zvrací</h1>
{include @item.latte item => $list[$i]}
{/for}
{/snippet}
Problém se projevil tím, že AJAXem se přenesla ve snippetu jen
h1, ale už ne obsah šablony @item.latte
Mohla za to v presenteru zapnutá invalidace snippetu, který v šabloně neexistoval (v minulosti byl smazán)
Presenter
<?php
...
$this->invalidateControl('list');
$this->invalidateControl('header');//Invalidace neexistujícího (odstraněného) snippetu
...
?>
Stačilo ji tedy jen odstranit
<?php
...
$this->invalidateControl('list');
...
?>
A všechno začalo fungovat.
#46 před 5 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Snippety a inkludovana šablona
@henry: tady jde o jinou chybu. Neinvaliduje se snippet, který je v includované šabloně. Každopádně takové chování je nepříjemné, které popisuješ a chtělo by to nějak ošetřit.
#47 před 3 měsíci
- mcmatak
- Nette guru

- Registrovaný: 17. 7. 2009
- Příspěvky: 375
Re: Snippety a inkludovana šablona
předpokládám, že stále nevyřešeno?
#48 před 3 měsíci
- hrach
- Nette guru

- Registrovaný: 11. 3. 2007
- Příspěvky: 519
Re: Snippety a inkludovana šablona
Možné řešení jsem odeslal jako pull: https://github.com/…tte/pull/556
{snippetRunner list}
{for $i = 0; $i < count($list); $i++}
{include @item.latte item => $list[$i]}
{/for}
{/snippetRunner}
Sablona @item.latte muze obsahovat co chces. Invalidovat je treba ale i
list! Ten se nicmene do prohlizece neodesle!!! →
byl by totiz prazdny a automaticka obsluha by tak vymazala obsah daneho
elementu. Snippety v sablone pak budou fungovat, jak se predpoklada.