Selektywne cachowanie w SMARTY

System szablonów Smarty posiada wbudowane cachowanie stron. Mechanizm ten znakomicie przyspiesza działanie serwisów, które muszą działać pod dużym obciążeniem. Dzięki możliwości sprawdzania, które fragmenty strony pozostają w pamięci podręcznej, można radykalnie zmniejszyć liczbę zapytań do bazy danych jak i odciążyć PHP od parsowania szablonów.

Problem może jedynie stworzyć sytuacja, w której chcemy aby fragment strony pozostawał nie cachowany – może to być np. aktualne notowania, dynamiczna reklama czy cokolwiek innego. Jeżeli chcielibyśmy taki fragment strony dołączać za pomocą funkcji {include}, to niestety i ona będzie podlegać cachowaniu.

Zamiast jednak używania {include}, możemy wykorzystać funkcję {insert}, która z poziomu szablonu wywoła wskazaną (w parametrze name) funkcję PHP i umieści w szablonie rezultat działania funkcji. Po szczegóły zapraszam do dokumentacji, a poniżej podaję przykład gotowego rozwiązania.

Tworzymy funkcję w PHP, która będzie zwracała przetworzony przez Smarty, wskazany w parametrze szablon:

function insert_nocache($PARAMS,$smarty) {
 
//wyłączamy cachowanie
$smarty->caching = 0;
 
//pobieramy i zwracamy przetworzony szablon
return $smarty->fetch($PARAMS['file']);
}

A tutaj już sposób wywołania tej funkcji z poziomu szablonu:

..tutaj część która jest cachowana..
{insert name=nocache file='plik_bez_cachowania.tpl'}
..i tutaj dalsza część która jest cachowana..