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..