Поставим обработчик события на OnEpilog. Для этого добавим код в init.php.
init.php - необязательный файл в рамках структуры файлов Bitrix Framework. Он автоматически подключается в прологе.
Файл может содержать в себе инициализацию обработчиков событий, подключение дополнительных функций - общие для всех сайтов. В этом случае он располагается по пути /bitrix/php_interface/init.php. Для каждого отдельного сайта может быть свой аналогичный файл. В этом случае он располагается по пути /bitrix/php_interface/ID сайта/init.php. Если есть оба файла, то система подключит оба, но первым при этом будет файл /bitrix/php_interface/init.php.
Добавим код в init.php
/*Проверка If-Modified-Since и вывод 304 Not Modified */ AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince')); class CBDPEpilogHooks { function CheckIfModifiedSince() { GLOBAL $lastModified; if ($lastModified) { header("Cache-Control: public"); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT'); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $lastModified) { $GLOBALS['APPLICATION']->RestartBuffer();CHTTP::SetStatus('304 Not Modified'); exit(); /*header('HTTP/1.1 304 Not Modified'); exit;*/ } } } }
Далее в шаблоне компонента нужно задать переменную $lastModified.
В шаблоне компонента создам 2 файла result_modifier.php и component_epilog.php (если их нет).
Добавим код в result_modifier.php
$cp = $this->__component; // объект компонента if (is_object($cp)) $cp->SetResultCacheKeys(array('TIMESTAMP_X'));
TIMESTAMP_X - Дата последнего изменения параметров блока.
Добавим код в component_epilog.php
GLOBAL $lastModified; if (!$lastModified) $lastModified = MakeTimeStamp($arResult['TIMESTAMP_X']); else $lastModified = max($lastModified, MakeTimeStamp($arResult['TIMESTAMP_X']));
Проверить работу можно на сайте: http://last-modified.com/ru/if-modified-since.html