Smarty кеш с ошибкой содержимого базы данных - PullRequest
4 голосов
/ 23 февраля 2012

Я использую функцию smarty cache, и сегодня я понимаю, что мой контент не обновлялся правильно.

Я использую кеширование файлов в smarty с этими шаблонами:

  • index.html (используйте этодля кэширования главной страницы (около 8 КБ)
  • list.html (используйте для кеширования около 10 страниц - около 7 КБ каждая)

У меня есть пользовательские CMS, и это позволяет мнеизмените главную страницу, которую он не обновляет, я использую:

cache_dir и кеширование правильно, потому что если я удаляю файл кеша, я вижу, что мое содержимое обновлено.

есть простой способобновлять эти файлы, не удаляя их каждый раз, когда я обновляю содержимое страницы?

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

Вы можете использовать это:

$Smarty = new Smarty();
$Smarty->caching = 1;

$SmartyTemplate = $Smarty->createTemplate($yourfile, $your_cache_id);
// $row = mysql_query("select date_modified from table where ...

if ($SmartyTemplate->isCached() && $SmartyTemplate->cached->timestamp < $row['date_modified']) {
    $Smarty->clearCache($yourfile, $your_cache_id); 
}
$SmartyTemplate->assign('variables', 'data');
$SmartyTemplate->display();
1 голос
/ 23 февраля 2012

Здесь у вас есть два варианта.

1) При обновлении чего-либо о index.html или list.html сообщите Smarty о необходимости очистить соответствующий кэш с помощью $smarty->clearCache("index.html"); См. Документы .

2) Напишите свой собственный CacheResource .Затем вы можете перегрузить методы fetch () и fetchTimestamp (), чтобы дополнительно запросить у некоторой базы данных время внешней модификации.Таким образом, вам не нужно clearCache() сообщать Smarty, что что-то изменилось.

Первый вариант проще и быстрее реализуется.Второй вариант - глобальный, потенциально тратит ресурсы на дополнительные подключения к БД.

...