| Дата: Пятница, 15.05.2015, 04:12 | Сообщение # 1 |
Группа: Администраторы
Сообщений: 1530
| Создаем сниппет для отправки заголовка страницы на дату изменения [[LastModified_robots]]: ------------------------------------------------------------------------------------
<?php function DetectSearchEngine($USER_AGENT) { $engines = array( array('Aport', 'Aport'), array('Google', 'Google'), array('msnbot', 'MSN'), array('Rambler', 'Rambler'), array('Yahoo', 'Yahoo'), array('Yandex', 'Yandex'), array('Aport', 'Aport robot'), array('Google', 'Google'), array('msnbot', 'MSN'), array('Rambler', 'Rambler'), array('Yahoo', 'Yahoo'), array('AbachoBOT', 'AbachoBOT'), array('accoona', 'Accoona'), array('AcoiRobot', 'AcoiRobot'), array('ASPSeek', 'ASPSeek'), array('CrocCrawler', 'CrocCrawler'), array('Dumbot', 'Dumbot'), array('FAST-WebCrawler', 'FAST-WebCrawler'), array('GeonaBot', 'GeonaBot'), array('Gigabot', 'Gigabot'), array('Lycos', 'Lycos spider'), array('MSRBOT', 'MSRBOT'), array('Scooter', 'Altavista robot'), array('AltaVista', 'Altavista robot'), array('WebAlta', 'WebAlta'), array('IDBot', 'ID-Search Bot'), array('eStyle', 'eStyle Bot'), array('Mail.Ru', 'Mail.Ru Bot'), array('Scrubby', 'Scrubby robot'), array('Yandex', 'Yandex') );
foreach ($engines as $engine) { if (stristr($USER_AGENT, $engine[0])) { return($engine[1]); } } return (false); }
//определяем поисковой ли бот пришёл к нам $detect = DetectSearchEngine($_SERVER['HTTP_USER_AGENT']); //только для ботов //или (ненужное заремить) detect =1; //для всего
if ($detect) { //Получаем время изменения ресурса из таблички site_content //этот параметр меняется только тогда, когда меняем содержимое страницы, но не шаблона //это важно! $last_modified_time = $modx->documentObject['editedon'];
//Если поисковик спрашивает у сервера: у меня есть эта страница в кэше с определённого времени, изменилась ли она? //смотрим на время, сверяем: if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_modified_time){ //Если НЕ изменилась то отправляем 301 ответ header('HTTP/1.1 304 Not Modified'); //И убиваем выполнение дальнейших скриптов, то есть сервер кроме ответа заголовка не шлёт саму страничку die; }
//устанавливаем поисковику Last-Modified если он первый раз на странице либо если страница обновлена. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT');
} else { //тут можно выполнять код для обычного посетителя } ?> ------------------------------------------------------------------------------------
Создаем сниппет для проверки даты изменения страницы [[last_modified_info]]: ------------------------------------------------------------------------------------ <?php $last_modified_time = $modx->documentObject['editedon']; $LastModified = gmdate("D, d M Y H:i:s \G\M\T", $last_modified_time); echo "<!--last_modified_time:".$last_modified_time."/".$LastModified."-->"; ?> ------------------------------------------------------------------------------------
Теперь, чтобы все работало вставляем во все шаблоны
[!LastModified_robots!] код шаблона [!last_modified_info!]
Проверяем валидатором урлы страниц сайта
http://last-modified.com/ru/
Должны увидеть что-то типа
|
|
| |