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 | GitHubCMS 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

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Snippety a inkludovana šablona

jo, pravda, omlouvám se..

ale porovnejte přehled obsahu po najetí na link šablony: stará docnová doc

zdá se mi členění staré doc o něco přehlednější anebo síla zvyku?

Editoval 22 (1. 7. 2011 8:15)

 

#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

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1622

Re: Snippety a inkludovana šablona

22: To ztroskotá na bugu #160

 

#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.

 

Zápatí