Цитата |
---|
Алексей Воронин написал: Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент:
|
Мне на одном проекте тоже пришлось делать такую же хрень. Модифицировать ядро, как вы, я не стал, ограничился событиями.
В init.php:
Код |
---|
// обработка If-Modified-Since
AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince'));
class CBDPEpilogHooks
{
function CheckIfModifiedSince()
{
GLOBAL $lastModified;
if ($lastModified)
{
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastModified).' GMT');
$arr = apache_request_headers();
foreach ($arr as $header => $value)
{
if ($header == 'If-Modified-Since')
{
$ifModifiedSince = strtotime($value);
if ($ifModifiedSince > $lastModified)
{
$GLOBALS['APPLICATION']->RestartBuffer();
CHTTP::SetStatus('304 Not Modified');
}
}
}
}
}
}
|
(будет работать только в апаче из-за использования сервер-специфичной функции apache_request_headers())
Смысл, надеюсь, понятен. Сначала проверяем, задана ли глобальная переменная $lastModified. Если она задана, то отдаём заголовок Last-Modified. Потом смотрим, есть ли в запросе заголовок If-Modified-Since. Если он есть и он больше даты последнего изменения, отдаём пустую страницу со статусом 304 Not Modified.
Это половина апельсина. Вторая половина -- задать переменную $lastModified. Применительно к странице детального просмотра элемента это может выглядеть так:
1) в result_modifier.php шаблона компонента детального просмотра сохраняем TIMESTAMP_X в кеше компонента:
Код |
---|
$cp = $this->__component; // объект компонента
if (is_object($cp))
$cp->SetResultCacheKeys(array('TIMESTAMP_X'));
|
2) в component_epilog.php того же шаблона определяем переменную $lastModified
Код |
---|
GLOBAL $lastModified;
if (!$lastModified)
$lastModified = MakeTimeStamp($arResult['TIMESTAMP_X']);
else
$lastModified = max($lastModified, MakeTimeStamp($arResult['TIMESTAMP_X']));
|
Цитата |
---|
sheppord написал: одни говорят, если правильно настроить Last-Modified, то снижается нагрузка на сервер, |
Это говорят сеошники. Такое было актуально лет 20 назад, когда сайты по большей части состояли из статических html-страниц, лежащих на диске. То, что сеошники до сих пор говорят об этом, очень ярко характеризует их опыт, знания, кругозор, интеллект и общий уровень развития.