RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Кеширования HTML вывода в Joomla

Joomla позволяет кешировать отдельные части шаблонов, компонентов, а именно их вывод. Для этого необходимо создать объект кеша с обработчиком "output", так как показано

// создаем объект кеша
$cache = JFactory::getCache('com_test', 'output');

// выбираем уникальный идентификатор кеша
$cache_id = JRequest::getVar('Itemid', 1);

// начало кеширования
if (!$cache->start($cache_id)) {
    ?>    
    <div>
        Сложный и ресурсоемкий вывод HTML кода
    </div>    
    <?php
    // конец кеширования
    $cache->end();
}

Создается кеш-объект c обработчиком "output". "com_test" в данном случае - это место хранения кеша: /cache/com_test ( в случае файлового кеша)

Далее выбирается идентификатор кеширования. Он должен зависеть например от внешних условий расширения. Таким образом для разных страниц, с разными Itemid будет создаваться разный кеш и не будет путаницы. В принципе можно подставлять сериализованые массивы с текущими параметрами вызова и прочее. Хорошим вариантом можно считать следующий вариант:

$Itemid = JRequest::getvar('Itemid', 1);
$id = JRequest::getvar('id');
$cache_id = $Itemid .'_'. $id .'_'. $lastModifiedId;

Таким образом обновление произойдет автоматический сброс при изменении элемента администратором сайта.

 

Внимание: Будте осторожны с выбором идентификатора кеша. Например использование следующих вариантов грозит резким ростом размера кеша, особенно на больших сайтах с высокой посещаемостью. Эффективность кеширования пойдет к нулю, более того в какой-то мере это можно считать дырой в безопасности сайта.

$cache_id = serialize($_GET);
$cache_id = serialize($_REQUEST);

Далее начинаем непосредственный перехват вывода. Если файл кеша отсутствует или истек период его жизни, то функция start() вернет "false", в противном случае функция вернет "true".

В случае просроченного/отсутсвующего кеша - запуститься буферизация вывода. Заканчивается буферизация после выполнения end(). Если start() вернул "true", будет использован тот текст, который хранился с прошлого раза в файлах кеша.

Смотрите также:
Комментарии (2) Добавить комментарий
  • edikss1
    edikss1
    21 Октября 2011, 22:55
     ↑  +1  ↓     ответ

    Спасибо очень полезно

  • Александр
    Александр
    13 Февраля 2015, 16:09
     ↑  0  ↓     ответ

    Возможно ли как то исключить из кеширования определенный компонент или модуль при включенном стандартном кеше и стандартном плагине Система ->Кеш?

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.