LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 21:12:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Обработка заголовка Last-Modified  (Прочитано 2339 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Doctor
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« : 09.04.2008, 18:00:27 »

Можно ли сделать, чтобы Last-Modified: возвращал дату создания или изменения документа ?
Записан
Doctor
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #1 : 09.04.2008, 18:10:54 »

Сделал следующую модификацию:

в файле /components/com_content/content.php в функции show() перед строкой

Код:
$cache->call( 'HTML_content::show', $row, $params, $access, $page );

дописал такой код
Код:
$date_arr = explode(' ',$row->modified);
$tm = explode(':',$date_arr[1]);
$dt = explode('-',$date_arr[0]);
$date1 = mktime($tm[0],$tm[1],$tm[2],$dt[1],$dt[2],$dt[0]);

$date_arr = array(); $tm = array(); $dt = array();

$date_arr = explode(' ',$row->created);
$tm = explode(':',$date_arr[1]);
$dt = explode('-',$date_arr[0]);
$date2 = mktime($tm[0],$tm[1],$tm[2],$dt[1],$dt[2],$dt[0]);

$date = ($date1>$date) ? $date1 : $date2;

$last_modified = gmdate('D, d M Y H:i:s', $date) . ' GMT';

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
  $if_modified = preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']);
  if ($if_modified == $last_modified) {
    header('HTTP/1.0 304 Not Modified');
    header('Cache-Control: max-age=86400, must-revalidate');
    exit;
  }
}

header('Cache-Control: max-age=86400, must-revalidate');
header('Last-Modified: ' . $last_modified);


Всё равно Last-Modified выводит текущую дату. Может я что-то не то делаю?
Записан
Doctor
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #2 : 10.04.2008, 12:47:37 »

попробовал такие изменения:

В функции show() оставил:

$date_arr explode(' ',$row->modified);
$tm explode(':',$date_arr[1]);
$dt explode('-',$date_arr[0]);
$date1 mktime($tm[0],$tm[1],$tm[2],$dt[1],$dt[2],$dt[0]);

$date_arr = array(); $tm = array(); $dt = array();

$date_arr explode(' ',$row->created);
$tm explode(':',$date_arr[1]);
$dt explode('-',$date_arr[0]);
$date2 mktime($tm[0],$tm[1],$tm[2],$dt[1],$dt[2],$dt[0]);

$date = ($date1>$date) ? $date1 $date2;

$GLOBALS['date'] = $date;

а код

$last_modified gmdate('D, d M Y H:i:s'$GLOBALS['date']) . ' GMT';

if (isset(
$_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
  
$if_modified preg_replace('/;.*$/'''$_SERVER['HTTP_IF_MODIFIED_SINCE']);
  if (
$if_modified == $last_modified) {
    
header('HTTP/1.0 304 Not Modified');
    
header('Cache-Control: max-age=86400, must-revalidate');
    exit;
  }
}

header('Cache-Control: max-age=86400, must-revalidate');
header('Last-Modified: ' $last_modified);

перенес в файл шаблона.

локально протестил - заголовки отправляются.

А на сервере не хотят.
Записан
missha
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #3 : 16.06.2008, 14:28:54 »

найди строчку header в index.php и начнет выводиться нормально, однако у меня какого-то фига виводиться 1970 год...
Записан
missha
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #4 : 16.06.2008, 16:21:36 »

между прочим очень интересную тему затронул ТС.. очень необходима данная штука в оптимизации... это поможет поисковику быстрее проиндексировать большое кол-во страниц... но решения я пока сам найти не могу... все чертов 1970 год появляется...
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #5 : 16.06.2008, 21:14:48 »

Намного проще, и не менее эффективно решение от Physicist'a: Мамбот кеширования страниц сайта System-Cache. Данный мамбот возвращает на запрос код 304 если содержимое материала не менялось. И количество запросов к БД существенно сокращает, и с точки зрения поисковиков - тоже весьма адекватно себя ведет... И никаких файлов компонентов править не нужно...
Записан
missha
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #6 : 17.06.2008, 00:41:22 »

ОГО!... спасибо!!!!... даже не знал! еще раз подтверждаю слова про Physicist'a.... действительно голова!

и небольшой вопросик сразу: а там кеширование по посл. заходу или по дате создания/изменения??
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #7 : 17.06.2008, 10:57:56 »

и небольшой вопросик сразу: а там кеширование по посл. заходу или по дате создания/изменения??
по контрольной сумме всей страницы, передаваемой в поле etag запроса...
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #8 : 17.06.2008, 15:51:28 »

по контрольной сумме всей страницы, передаваемой в поле etag запроса...
На самом деле как md5(URI), т.к. именно так сделано в Joomla!1.5. Но ты прав, md5 от страницы было бы более правильно.
Записан
Physicist
Support Team
*****

Репутация: +179/-0
Offline Offline

Пол: Мужской
Сообщений: 1154


Рябов Денис


« Ответ #9 : 17.06.2008, 15:55:35 »

Кстати, где-то встречал хак для правильного заголовка Last-Modified. Суть, кажется, в том, что в /components/com_content/content.php при task=view (навскидку не впомню какая функция там вызывается, может и show) в некоторую глобальную переменную записывалось поле modified (или created если контент не модифицировался), а в /index.php там где формируются заголовки ставилось условие на isset наша глобальная переменная, и если она есть — выводился нужный заголовок.

А ведь можно включить такую «фичу» в SystemCache.
Записан
missha
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 29


« Ответ #10 : 19.06.2008, 01:44:13 »

Кстати, где-то встречал хак для правильного заголовка Last-Modified. Суть, кажется, в том, что в /components/com_content/content.php при task=view (навскидку не впомню какая функция там вызывается, может и show) в некоторую глобальную переменную записывалось поле modified (или created если контент не модифицировался), а в /index.php там где формируются заголовки ставилось условие на isset наша глобальная переменная, и если она есть — выводился нужный заголовок.

А ведь можно включить такую «фичу» в SystemCache.

неплохо бы было бы...
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet