Strana: 1
Štítek: smarty
Kešování v šablonovacím systému Smarty
Pokud o Smarty nevíte vůbec nic, doporučuji vám výborný seriál SMARTY – šablonovací systém pro PHP od Štěpána Kouby. Dozvíte se v něm vše podstatné a zjistíte možná, že Smarty je skutečně ideální nástroj pro oddělení aplikační a prezentační vrstvy vašeho webového projektu.
Odpůrci Smarty vyčítají mohutnost a relativní pomalost, ale slovo relativní je skutečně na místě, protože když se budete zabývat kešováním stránek, které má Smarty vestavěné, tak můžete dosáhnout toho, že pro zobrazení dané stránky nebude třeba jediný SQL dotaz do databáze. Odpůrce, kteří nechápu na co vlastně je šablonovací systém dobrý, odkazuji na diskuse pod zmíněným seriálem.
Kešujeme se Smarty
Není to složité ani pro mě a to nejsem nijak zvlášť dobrý programátor. Sledujte krok za krokem komentovanou ukázku srciptu.
<?php
// Načteme knihovnu Smarty a vytvoříme nový objekt:
require('Smarty.class.php');
$smarty = new Smarty;
// Zapneme kešování:
$smarty->caching = true;
// Kolik sekund kešujeme:
$smarty->cache_lifetime = 3600;
// Adresář kde jsou uloženy šablony:
$smarty->template_dir = "/include/templates";
// Adresář pro ukládání kompilovaných šablon:
$smarty->compile_dir = "/tmp/templates_c";
// Adresář pro ukládání kešovaných stránek:
$smarty->cache_dir = "/tmp/cache";
// Unikátní číslo, nebo řetězec, pro konkrétní stránku:
$spot = $_GET['spot'];
$rubrika = $_GET['rubrika'];
// Je požadovaná stránka uložena v keši?
if($smarty->is_cached('spot.tpl', $rubrika."|".$spot)) {
// Stránka je v keši tak ji zobrazíme:
$smarty->display('spot.tpl', $rubrika."|".$spot);
} else {
// Stránka není v keši, načteme data:
$query = mysql_query("SELECT * FROM clanky WHERE rubrika = '$rubrika' AND spot = '$spot';");
$obsah = mysql_fetch_array($query);
// Data pošleme do šablony:
$smarty->assign($obsah);
// Zobrazíme stránku:
$smarty->display('spot.tpl', $rubrika."|".$spot);
}
?>
Myslím si, že to není příliš pracné a pokud to spojíte s dalšími
výhodami systému Smarty nebudete chtít už pracovat jinak. Doporučuji si do
šablon posílat data pomocí $smarty->assign($obsah)
v asociativních polích a pak se vám s nimi bude velmi dobře pracovat.
Při ladění si také zapněte konzoli Smarty: $smarty->debugging =
true.
Vyprazdňujeme keš
Někdy samozřejmě potřebujete kešované stránky vyprázdnit, například když někdo ke spotu přidá komentář.
<?php
// Keš můžeme vyprázdnit úplně celou:
$smarty->clear_all_cache();
// Nebo jen konkrétní stránky:
$smarty->clear_cache('spot.tpl', $rubrika."|".$spot);
$smarty->clear_cache('rubrika.tpl', $rubrika);
// Nebo jen SKUPINU šablon, například obě stránky výše:
$smarty->clear_cache(NULL, $rubrika);
?>
Máte tedy celou keš ve svých rukou a myslím si, že zrychlení vašeho webu za tu trochu námahy stojí a nakonec to skutečně není nic složitého.
A to je konec…
Možná jste si všimli, ale spíš ne, že tento weblog po několika publikačních systémech zakotvil na mém, vlastnoručně vyrobeném blogovadle. Pohání jej Smarty, šablony kešuju 24 hodin. Dotazy do databáze se proto provádějí jen jednou denně. Vlastně jste na weblogu se statickými stránkami.
Dalším pohonem blogu je výborné Texy!, kterému tímto dávám kredit ;-)
- Související:
- SMARTY – šablonovací systém pro PHP – Seriál na Interval.cz, Štěpán Kouba, 15.9.2003 – 2.6.2004
- Smarty – Oficiální stránka projektu Smarty
Jirka Ch | 21. Listopad 2005, 1:10 | „Články“ | Trvalý odkaz | Komentáře (45) | Štítky: kešování, php, smarty