Как установить:
1. копируем файл RZ_cache.php в корень сайта
2. Правим в нем: var $ttl; - время жизни кэша в секундах, если нужно
3. Правим $this->cache_dir = dirname(__FILE__) . '/tmp/cache/rzc_'; - это путь к папке и начало названия файла кэша. По умолчанию - в папке с кэшами админки, что позволяет очищать кэш из админки.
4. вставляем в index.php:
Code: Select all
#$Id: index.php 5266 2008-11-13 12:15:37Z alby $
// cache_hack (первая часть в самом начале)
require_once('RZ_cache.php');
$RZ_c = new RZ_cache($_SERVER["REQUEST_URI"]);
// очистка всего кэша по гету
if (isset($_GET['clear_all'])) {
$RZ_c->clear_all();
}
if (isset($_GET['clear_this'])) {
$RZ_c->clear();
}
if (isset($_GET['clear_sub'])) {
$RZ_c->clear(true);
}
$RZ_c->echo_cache();
// cache_hack
$orig_memory = (function_exists('memory_get_usage')?memory_get_usage():0);
......................................
if (isset($pageinfo) && $pageinfo !== FALSE)
{
// cache_hack (вторая часть)
$RZ_c->need_cache = $RZ_c->need_cache && $pageinfo->cachable;
// cache_hack
$gCms->variables['pageinfo'] =& $pageinfo;
......................................
echo $html;
// cache_hack (третья часть)
$RZ_c->write_cache(ob_get_contents());
// cache_hack
@ob_flush();
......................................

Как работает:
1. Когда открывается страничка, проверяется наличие для нее кэша, если есть, и он не устарел - то отображается кэш.
2. Если нет кэша, или он устарел, после того, как страница была открыта, если у нее стоит в админке, что она кэшируется, то создается в папке файл с контентом.
3. Если есть GET или POST - странички не кэшируются, и кэш игнорируется (безопасно для форм)
4. Можно принудительно сбросить кэш:
- в админке (Администрирование сайта -> Общие настройки -> Очистить кэш) - весь
- если добавить к пути ?clear_all (например, example.ru/?clear_all), то очистится весь кэш
- если добавить к пути ?clear_this (например, example.ru/foo/?clear_this), то очистится кэш только этой страницы
- если добавить к пути ?clear_sub (например, example.ru/bar/?clear_sub), то очистится кэш этой страницы и всех вложеных.
Ограничения:
1. Кэш автоматом не сбрасывается, после редактирования (при необходимости можно самому прописать в ивенты, используя $RZ_c глобальную переменную)
2. Если на странице есть ротирующиеся элементы (например, баннеры, или случайные афоризмы (и т.п.)) - это не будет работать (как вариант - использовать php вставки).
3. Код не идеален - писал быстро, мало комментариев, многое я бы переделал, но ща нет времени.
