cache, assign a další pokročilá práce s templates
- ales.kafka
- Člen | 34
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
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
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..