Кроме кэширования всей страницы, можно кэшировать отдельные блоки. Возникает резонный вопрос: Для чего нужно кэшировать блок, если можно кэшировать всю страницу?
Действительно, кэширование блока не дает особого выигрыша в скорости сайта — в этом плане для статичных страниц лучше применять кэширование всей страницы. Кэширование блоков можно делать, когда, например, нельзя кэшировать страницу целиком. Но это не главное назначение кэшей. Самое полезное, для чего можно использовать кэш блока — это
К примеру, вы имеете сайт, касающийся производства окон. Вы решаете создать аналогичный сайт для другого города. Понятно, что контент обоих сайтов в основном будет одним и тем же, и было бы хорошо, если блоки на втором сайте копировали общие блоки первого сайта. Причем, если редактируется блок на первом сайте, то все изменения должны отражаться и на втором сайте. Как это можно реализовать, смотрите в конце данной статьи.
Кстати, сайты для нескольких городов (так называемый многодоменный сайт) лучше сделать на основе одного сайта, используя в шаблонах конструкции вида:
Подробности в статье Мультидоменный сайт.
Кэширование блока включается в окне редактирования блока в пункте меню: "Блок > Настройки блока" в разделе "Кэширование блока". Нежелательно применять кеширование блока, если имеются запросы к блоку, например пагинация блока (параметр part).
Файл кэша имеет следующие особенности:
Сам HTML код, в частности, URL страниц и файлов в кэш-файле не изменяются. Поэтому, если вы хотите использовать кэши на ведомых сайтах, то URL картинок в шаблонах лучше делать абсолютными (должны начинаться с "http://").
URL внутренних страниц, напротив, нужно делать относительными. При этом, сайт лучше переключить в режим ЧПУ, так как ЧПУ ссылки страниц на ведомом сайте можно всегда сделать такими же, как и на головном сайте.
Во-первых, ведомый сайт должен находиться на том же сервере. На нем достаточно создать и назначить "ведомый" шаблон такого вида:
text-cached.tpl
<?php
# Чтение и вывод кэш-файла из головного сайта
echo file_get_contents('/var/www/site2.com/cached-blocks/99.htm');
?>
Если в кэше есть php-код, нужно сначал буферизовать вывод:
text-cached.tpl
<?php
ob_start();
require'/var/www/site2.com/cached-blocks/99.htm';
echo ob_get_clean();
?>
text-cached.tpl
<?php
# Подключение файлов *.css и *.js на странице ведомого сайта
$hfile = '/var/www/site2.com/templates/text.tplh'; // Файл предобработчика на головном сайте
if (file_exists($hfile)) {
(function($prehandlerFile){
$block = 99;
$xdat = [2=>220,4=>6];
require $prehandlerFile;
})($hfile);
}
# Вывод блока
$cfile = '/var/www/site2.com/cached-blocks/99.htm'; // Кэш-файл на головном сайте
if (file_exists($cfile)) {
ob_start();
require $cfile;
echo ob_get_clean();
}
?>