[2.1-dev] Jak použít cache?
- Mysteria
- Člen | 797
Zdravím, mám v šabloně následující kód:
{#content}
{cache $id, expire => '+1 week'}
{var $person = $person->fetch()}
<section>
<table>
...
</table>
</section>
{/cache}
{/#}
Tohle je v pohodě, při prvním zavolání se provede dotaz do DB, při
dalších se načítá z cache.
Problém ale je, že chci do titulku stránky dostat kus z $person.
{#title}{$person->name|capitalize}{/#}
Teď co s tím? Dát {cache} tag přes celou šablonu (uvnitř mít {#title} a {#include}) nejde.
Takže vidím dvě možnosti. Buď cachovat mimo šablonu $person, ale to zase nebudu mít v cache celou šablonu. Nebo cachovat šablonu a zvlášť cachovat jenom ten název pro title, ale to zase budu mít jednu stránku rozdělenou ve 2 cache.
Budu vděčnej za jakejkoliv nápad / popostrčení. Díky.
- Michalek
- Člen | 211
Trvalo mi dva roky přijít na to :-) „n:block“
{#content}
{cache $id, expire => '+1 week'}
{var $person = $person->fetch()}
<section>
<table>
<tr><td><h2 n:block="title">{$person->name|capitalize}</h2></td></tr>
</table>
</section>
{/cache}
{/#}
Editoval Michalek (16. 9. 2013 20:59)
- Mysteria
- Člen | 797
@Michalek: Díky za nakopnutí, ale tak jednoduché to nebude. :P
Po chvilce zápolení jsem přišel na opravdu zajímavou věc:
Pokud mám kód:
{#content}
{cache $id, expire => '+1 week'}
{var $file = $person->fetchAll()}
<section class='download'>
<table class='download'>
{define #title}{$person[58]->name}{/define}
</table>
</section>
{/cache}
{/#}
Tak se stránka zobrazí, a vloží se do titulku správná věc. Ale i přesto, že se vygeneruje cache, tak se znovu vykonává dotaz do databáze pokaždé!
{#content}
{cache $id, expire => '+1 week'}
{var $file = $person->fetch()}
<section class='download'>
<table class='download'>
{define #title}{$person->name}{/define}
</table>
</section>
{/cache}
{/#}
Tak dostanu chybu:
Cannot read an undeclared property Nette\Database\Table\Selection::$name.
Absolutně nemám páru proč s ->fetch() to nefunguje, když s ->fetchAll() a uvedením indexu pole to jde (i když jenom částečně, ale alespoň se to zobrazí).
Pokud použiju n: makro nebo místo {define} makro {block}, výsledky jsou pokaždé stejné. Nějaký další nápad? ;)
Editoval Mysteria (16. 9. 2013 22:44)