Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

Други, листая форум наткнулся на следующий парадокс, народ барыжит вещи ну уж совсем из ряда вон выходящие, деньги деньгами, но совесть тоже надо иметь.

 

Выкладываю небольшой БЕСПЛАТНЫЙ Мануал по Last_modified. 

 

Для чего это нужно? 

 

HTTP заголовки Last-Modified и If-Modified-Since Зачем нужен Last-Modified

 

HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since(не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.

 

Экономия Трафика

 

Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.

 

Снижение нагрузки на сервер

 

Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modifiedотдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.

 

Ускорение индексации поисковыми системами

 

Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modified и правильно обрабатывать If-Modified-Since.

 

В файл /catalog/view/theme/default/template/common/header.tpl

после <head> ставим небольшой скрипт на PHP:

<?php
$num=mt_rand(2000,10000);
$LastModified=gmdate("D, d M Y H:i:s \G\M\T", time()-$num);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5)); 
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= $num) {
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
?>

 

HTTP заголовок должен отдаваться корректно.

 

Пользуйтесь на здоровье, но не забываем говорить спасибо )

Edited by Rashp
  • +1 8
Link to post
Share on other sites

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично:)

 

Для главной можно написать простой алгоритм, выбирающий наиболее поздний last modified из акций, рекомендуемых, новостей и прочего, как душе угодно.

Link to post
Share on other sites

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично :)

 

Для главной можно написать простой алгоритм, выбирающий наиболее поздний last modified из акций, рекомендуемых, новостей и прочего, как душе угодно.

 

Соглашусь но только отчасти, только с точки зрения красоты кода, но с точки зрения практики нет!

У Яндекса пунктик по поводу частоты обновления контента, поэтому лучше отдавать last modified со всего сайта и не заморачиваться, логичо конечно индексировать только изменения, но как показывает практика не всегда хорошо.

Хотя по секрету: главное чтоб он был и корректно отдавался, остальное Яша зацепит из sitemap.xml, там если вы заметили есть тоже last_modified и он как раз на каждую статью и карточку товара идет :)

Link to post
Share on other sites

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично :)

 

Для главной можно написать простой алгоритм, выбирающий наиболее поздний last modified из акций, рекомендуемых, новостей и прочего, как душе угодно.

 

Соглашусь но только отчасти, только с точки зрения красоты кода, но с точки зрения практики нет!

У Яндекса пунктик по поводу частоты обновления контента, поэтому лучше отдавать last modified со всего сайта и не заморачиваться, логичо конечно индексировать только изменения, но как показывает практика не всегда хорошо.

Хотя по секрету: главное чтоб он был и корректно отдавался, остальное Яша зацепит из sitemap.xml, там если вы заметили есть тоже last_modified и он как раз на каждую статью и карточку товара идет :)

Почему же не всегда хорошо с точки зрения практики?

 

Все зависит от целей, которые Вы ставите перед собой.

 

Если нужно ускорить индексацию сайта, то пожалуйста, можете вешать last modified на главную.

 

А если сайт уже успешно проиндексирован и работает, то смысл обманывать робота? :)

 

Last modified из sitemap мне кажется имеет значительно более низкий приоритет, чем заголовок.

Link to post
Share on other sites

в базе у товара есть поле date_modified, вот его и нужно использовать.

 

А вот вариант freelancer даже более грамотный, но друзья, дело в том, что стандартный движок вообще не отдает никаких заголовков - это не есть правильно.

Теперь о морали:)

Обманывать поисковик иногда приходится и здесь уже не до красоты и морали иначе в топ не попадешь, а на 23456 позиции ваш сайт никому не интересен, до него просто не дойдут, поверьте человеку, у которого свой магазин и не один.

Я считаю более аморальным барыжить простейшим скриптом, который находится в свободном доступе в сети.

Ладно, всем удачи в продвижении:)

Link to post
Share on other sites

Кстати, вопрос к уважаемому freelancer, на сколько я понимаю вы принимаете участие в локализации движка, можете поспособствовать добавлению в следующие релизы заголовков, мелочь, а думаю многим будет приятно :)

Link to post
Share on other sites

конкретно в локализации нет, но заголовки добавить стоит. в ближайший релиз уже не успеем, но в минорную версию очень может быть.

Link to post
Share on other sites

в базе у товара есть поле date_modified, вот его и нужно использовать.

 

А вот вариант freelancer даже более грамотный, но друзья, дело в том, что стандартный движок вообще не отдает никаких заголовков - это не есть правильно.

Теперь о морали :)

Обманывать поисковик иногда приходится и здесь уже не до красоты и морали иначе в топ не попадешь, а на 23456 позиции ваш сайт никому не интересен, до него просто не дойдут, поверьте человеку, у которого свой магазин и не один.

Я считаю более аморальным барыжить простейшим скриптом, который находится в свободном доступе в сети.

Ладно, всем удачи в продвижении :)

Ну как бы я тоже самое предложил, что и фрилансер:)

 

Я вопрос не к морали поднял, а к тому, что данное действие на этап уже работающего сайта может быть не совсем уместно:)

Link to post
Share on other sites

В мультимагазине при переходе в категорию:

Warning: Cannot modify header information - headers already sent by (output started at /home/p50444/www/evro-remont-samara.ru/catalog/language/russian/product/kategory.php:1) in/home/p50444/www/evro-remont-samara.ru/catalog/view/theme/default/template/common/header.tpl on line 18

 

:( 

Link to post
Share on other sites

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
Edited by freelancer
  • +1 10
Link to post
Share on other sites

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");

 

Если не сложно, укажите путь к файлу где содержится строка: $product_info = $this->model_catalog_product->getProduct($product_id);

Link to post
Share on other sites

все нашел, 

 

путь к файлу для таких же как я, которые в бронепоезде :)

 

catalog/controller/product/product.php

  • +1 1
Link to post
Share on other sites

по аналогии стоит сделать для категорий, статей и прочего, где есть поле date_modified

  • +1 1
Link to post
Share on other sites

большое спасибо freelancer и Rashp !!!!!

Link to post
Share on other sites

Guest brk

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");

 

Однозначно в новую сборку ocStore !

Link to post
Share on other sites

после проделанного измениения, попробовал проверить, почему то дату отдает не правильную. Товар изменялся давно, а показывает вчерашнюю дату. В чем может быть проблема?

Link to post
Share on other sites

уже ставил решения но через пару месяцев снес из-за подобной ошибки:

Warning: Cannot modify header information - headers already sent by (output started at /home/p50444/www/evro-remont-samara.ru/catalog/language/russian/product/kategory.php:1) in/home/p50444/www/evro-remont-samara.ru/catalog/view/theme/default/template/common/header.tpl on line 18

 

кто воспользовался из этой ветки, отпишитесь плз, не проскакивают ли в журнале ошибки с заголовками?

Link to post
Share on other sites

ну это я в качестве примера из топика выше привел...

конкретно у меня такая ошибка:

 

2013-06-15 3:08:03 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/БАЗА/public_html/index.php:100) in /home/БАЗА/public_html/catalog/view/theme/mytheme/template/product/product.tpl on line 13

из-за нее и снес ластмодифай, хотя его хочется

Link to post
Share on other sites

кстати еще такой вопрос: в этой реализации заголовков будет ли обновляться дата категории товара при добавлении в нее нового товара?

Link to post
Share on other sites

И что будет, если на карточке товара есть динамический контент? Например блок "Акции", в котором товар постоянно новый.

Link to post
Share on other sites

Guest

вобще будет отображать загруженую копию. тоесть обновлятся не будет. по этой причине не использую ластмод на страницах сайта.

Link to post
Share on other sites

предлагаю проверить, а не предполагать.

ну или доки почитать, что бы понимать что происходит

Link to post
Share on other sites
Guest

предлагаю проверить, а не предполагать.

ну или доки почитать, что бы понимать что происходит

про динамический контент проверено. кстати даже статус у товара остается так как фактически пока не зайдешь в карточку не пере сохранишь он отдает загруженую из кеша копию.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.