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

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



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

комментарий Шура
Шура
2016-06-21T21:1821 июня 2016 21:18
Спасибо! Отлично работает! На opencart за данную функцию 300р заплатил)

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

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