cache, assign a další pokročilá práce s templates

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ales.kafka
Člen | 34
+
0
-

Dostal jsem se do fáze, kdy mám z 90% dokončenou administraci a přesunul se tedy na vývoj FrontEndu. Přemýšlím, jakým způsobem využít možnosti Nette, aby se co největší % přístupů načítalo bez přístupu do databáze a co nejjednodušeji.

Proto se chci zeptat zkušenějších, jak to vypadá s makrem {cache …}{/cache}. V některém ze starších vláken jsem se dočetl, že se jeho další vývoj má řešit někdy v září, tak jestli není nějaké info.

Už jsem si vytvořil docela silný nástroj pro líné zasílání dat do šablony a jejich cachování je proto poměrně jednoduché, ale vyvstal mi tu jeden problémů, který potřebuju vyřešit.

jakým způsobem nastavovat meta tagy a title, když jednotlivé data budou cachované?
Bohužel mi nefunguje makro assign, přestože používám nové šablony. Jedinný způsob jakým to jde, je pomocí blocků, což není zrovna ideální a už vůbec ne elegantní a správné řešení.

Pro názornost prozatimní nalezené řešení

{* @layout.phtml *}
<meta name="description" content="{block #descrition}{/block}" />

{* default.phtml *}
{capture $description}
	{block #descrition}
	{cache "..."}
	    {* Nejaky kod pro nalezeni spravneho popisu *}
	{/cache}
	{/block}
{/capture}

{* Capture je uzito proto, aby se block nezobrazil na danem miste *}

Když by to bylo jedinné možné řešení, tak by připadal do úvahy Feature Request pro makro Capture, a tedy podporovat i #, aby se tímto nastavil block který se nevypíše na daném místě. Vše by se zjednodušilo na:

{* default.phtml *}
{capture #description}
	{cache "..."}
	    {* Nejaky kod pro nalezeni spravneho popisu *}
	{/cache}
{/capture}

což už není nejhorší a dá se s tím pracovat. Máte někdo nějaký lepší způsob? Díky za každý námět a nakopnutí.

Ondřej Mirtes
Člen | 1536
+
0
-

Pokud má úvaha je správná a není to mou únavou kvůli pokročilé večerní hodině, tak bych řekl, že makro {block} se chová přesně tak, jaké chování chceš po {capture}. Pokud je {block #description} v nějaké šabloně presenteru (tím mám na mysli soubor Presenter.action.phtml, ne layout), tak se chová přesně tak, jak chceš – obsah bloku se zachytí a vypíše se tam, kde mu to nastavíš v layoutu. Musí ovšem být mimo {block #content}, pokud by byl uvnitř jeho, tak se vypíše spolu s ostatním obsahem, což je očekávané chování.

Příklad:

{* @layout.phtml *}

<meta name="description" content="{block #descrition}{/block}" />
...
{include #content}

{* Default.default.phtml *}

{block #description}
Toto se vypíše do meta tagu description.
{/block}

{block #content}
Hlavní text stránky.
{* poslední konečná značka bloku první úrovně je nepovinná *}

{* Default.another.phtml *}

{block #content}
Toto se vypíše jako content.
{block #description}
Toto se přidá ke contentu + se vypíše v description.
{/block}
ales.kafka
Člen | 34
+
0
-

LastHunter napsal(a):

Musí ovšem být mimo {block #content}, pokud by byl uvnitř jeho, tak se vypíše spolu s ostatním obsahem, což je očekávané chování.

Přesně tohle je řešení a nechápu, jak se něco takového mohl přehlížet. Moc díky

Kdyby někdo věděl, jaké novinky se chystají kolem makra cache, tak sem s nimi..