Добро пожаловать на Вопросы и Ответы YouOn , где вы можете задать вопросы и получить ответы от других пользователей сервиса.

Как в Joomla сделать Last-Modified заголовки при кешировании?

0 голосов
Здравствуйте, очень надеюсь, что вы мне поможете. У меня сайт на Joomla 2.5 и включено кеширование (без него совсем туго). Так вот, хочу сделать чтобы сайт отдавал заголовки Last-Modified, чтобы ПС знали когда страница последний раз редактировалась. В интернете нашёл совет добавить кой-чего в папке com_content, но кеширование не даёт нормально работать и заголовок загружается только первый раз. Подскажите пожалуйста как можно заставить Joomla отдавать нужный мне заголовок несмотря на кеширование.
Спросили Nov 14, 2014 в категории Интернет

1 Ответ

0 голосов

Как-то сам мучался с этой темой и нашёл-таки выход. Открой файл: 

\libraries\joomla\environment\response.php

Добавь внутри класса функцию:

public static function getDBlm($row_lm,$tab_lm,$query_lm,$id_lm)
   {
      $db = &JFactory::getDBO();
      $query = "SELECT `$row_lm` FROM `$tab_lm` WHERE `$query_lm` = '$id_lm'";
      $db->setQuery($query);
      $select_lm = $db->loadResult();
      return $select_lm;
   }
Добавить её можно, например, сразу после функции allowCache. После этого отыщите в файле функцию toString. Добавьте внутри неё этот код:
/*SENDING MODIFY-TIME HEADERS*/
if(JRequest::getVar('view')=='featured') $tempas=time();
elseif(JRequest::getVar('view')=='category') $tempas=0;
elseif(JRequest::getVar('id')){
$id_lm=JRequest::getVar('id');
$result = JResponse::getDblm('modified','#__content','id',$id_lm);
$year_lm=substr($result, 0, 4);
if($year_lm=='0000') $result = JResponse::getDblm('created','#__content','id',$id_lm);
$tempas=strtotime($result);
}
if(!$tempas==0){ self::setHeader('Last-Modified', gmdate("D, d M Y H:i:s \G\M\T", $tempas));
//if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])>=$tempas)
//self::setHeader($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');
}
 
 
Код нужно добавить перед строкой с:
self::sendHeaders();
 
Ответ Nov 14, 2014
...