Загрузка страницы..
1С-Битрикс вывод HTTP заголовок Last-Modified и If-Modified-Since на странице товара
HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта).
1С-Битрикс вывод HTTP заголовок Last-Modified и If-Modified-Since на странице товара
2015-11-10T12:11 10 ноя 2015 12:11
Просмотров: 37302

Поставим обработчик события на 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



Комментарии: 3

комментарий Модератор
Модератор
2021-12-20T14:4120 дек 2021 14:41
Ник, настраивается для шаблона компонента, который есть на нужной странице. Данный пример для детальной страницы новости и компонента newd.detail.
комментарий Ник
Ник
2021-10-04T08:2104 окт 2021 08:21
Приветствую! Вы пишите: В шаблоне компонента создам 2 файла result_modifier.php и component_epilog.php (если их нет). А какой путь у этого компонента в шаблоне?
комментарий Шура
Шура
2016-06-21T21:1821 июн 2016 21:18
Спасибо! Отлично работает! На opencart за данную функцию 300р заплатил)

Добавить комментарий

up
Яндекс.Метрика Яндекс.Метрик