[QUOTE]Дима Парфенов написал:
Аналогичная проблема, знает кто решения на сегодняшний день?)[/QUOTE]
Столкнулся с той же проблемой. Хостеры сказали, что делать для них это через nginx хлопотное дельце. Нашел вот такое решение, но еще не тестировал.[QUOTE]
AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince'));
class CBDPEpilogHooks
{
function CheckIfModifiedSince()
{
GLOBAL $lastModified;
if (!$lastModified) $lastModified=time()-1000;
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) {
header('HTTP/1.1 304 Not Modified'); exit();
}
}
}
}
?>
if (is_object($cp))
$cp->SetResultCacheKeys(array('TIMESTAMP_X'));
if (!$lastModified)
$lastModified = MakeTimeStamp($arResult['TIMESTAMP_X']);
else
$lastModified = max($lastModified, MakeTimeStamp($arResult['TIMESTAMP_X']));[/QUOTE]
Если кто-то вдруг тестировал и не получилось, то скажите, чтобы мы время не тратили.
Аналогичная проблема, знает кто решения на сегодняшний день?)[/QUOTE]
Столкнулся с той же проблемой. Хостеры сказали, что делать для них это через nginx хлопотное дельце. Нашел вот такое решение, но еще не тестировал.[QUOTE]
Вот код который использую я (работает и в случае с NGINX). Что бы не модифицировать ядро этот участок кода вставляете в /bitrix/admin/php_interface/init.php.
<?AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince'));
class CBDPEpilogHooks
{
function CheckIfModifiedSince()
{
GLOBAL $lastModified;
if (!$lastModified) $lastModified=time()-1000;
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) {
header('HTTP/1.1 304 Not Modified'); exit();
}
}
}
}
?>
Глобальная переменная $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']));[/QUOTE]
Если кто-то вдруг тестировал и не получилось, то скажите, чтобы мы время не тратили.