Jump to content

Prestashop 1.5.6 и новый модуль Google sitemap


Recommended Posts

Для информации !!!

 

В новой в версии магазина, обновлен модуль Google sitemap, в новом модуле при генерации sitemap.xml появилось новое поле "lastmod" последняя дата редактирования.

 

Так вот google при проверке sitemap.xml ругается на не верный формат выведенной даты.

Формат даты должен быть такой http://www.sitemaps.org/protocol.html#lastmoddef

 

Что делать что бы поправить?

 

Идем в ./site-home/modules/gsitemap/gsitemap.php, находим в функциях строчку

Edited by kharkov_max (see edit history)
Link to comment
Share on other sites

Правим это

if (!$this->_addLinkToSitemap($link_sitemap, array('type' => 'product', 'page' => 'product', 'lastmod' => $product->date_upd , 'link' => $url, 'image' => $image_product), $lang['iso_code'], $index, $i, $product_id['id_product']))

на это

if (!$this->_addLinkToSitemap($link_sitemap, array('type' => 'product', 'page' => 'product', 'lastmod' => date('c',strtotime($product->date_upd)) , 'link' => $url, 'image' => $image_product), $lang['iso_code'], $index, $i, $product_id['id_product']))

После данного изменения модуль будет формировать в sitemap.xml верную дату.

Данные изменения делаем для категорий, поставщиков и производителей.

 

Но !!!

Если Вы загружали НОВЫЕ товары через импорт CSV и ни разу товар не редактировали, то поле из которого берутся данные в модуль равно NULL, т.е. преобразования даты в XML выдаст чушь и google будет на него ругаться.

 

Что бы это полечить нужно в базе данных MySQL:

1. Текущим товарам с датой обновления NULL присвоить дату добавления тоавара

update prefix-table_product_shop set date_upd = date_add where date_upd = '0000-00-00 00:00:00'

2. Добавить на таблицу prefix-table_product_shop и поле date_upd повесить тригер на insert (добавление)

DROP TRIGGER IF EXISTS `database`.`update_date_product_insert`;
DELIMITER $$
CREATE TRIGGER `database`.`update_date_product_insert`
BEFORE insert ON `database`.`prefix-table_product_shop`
FOR EACH ROW
    BEGIN
        IF @DISABLE_TRIGGERS IS NULL THEN
            set NEW.date_upd = NEW.date_add;
        END IF;
    END $$
DELIMITER ;

Таким образом у всех товаров есть дата для модуля, дата добавляется тригером при импорте CSV, и редактируется при ручном редактировании товаров.

 

PS.

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

Edited by kharkov_max (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Господа, отпишу результат.

 

1. Хоть сам модуль и обновили и теперь он отображает дату в формате 0000-00-00 00:00:00, но Google ее не кушает.

И ругается на формат даты.

 

Поэтому вернул все выше описанные настройки у себя.

Так date('c',strtotime($product->date_upd)) все работает нормально.

 

2. Если товары импортируются из CSV, то тригер необходим.

На Google этого не видно, а вот yandex показывает и время добавления страницы, и время ее обновления ...

 

Так что пока пользуйте на здоровье этот механизм, если конечно он кому-то нужен ...

Link to comment
Share on other sites

Google не кушает дату по причине того, что по стандарту дата должна быть в формате 0000-00-00

я сделал такую конвертацию date_format(date_create($product->date_upd), 'Y-m-d') вместо $product->date_upd

и так в 4-х местах с $product-> , $category-> , $manufacturer-> , $supplier->

 

 

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

Tools::file_get_contents('http://www.google.com/webmasters/sitemaps/ping?sitemap=.urlencode(http.(Configuration::get(PS_SSL_ENABLED') ? 's' : '').'://'.Tools::getShopDomain(false, true).$this->context->shop->physical_uri.$this->context->shop->virtual_uri.$this->context->shop->id.'_index_sitemap.xml'));




			
				


	Edited  by wagood
	
	
		(see edit history)
		
	

			
		
Link to comment
Share on other sites

  • 2 weeks later...

Google не кушает дату в формате 0000-00-00, а кушает в формате date('c',strtotime($product->date_upd))  и только.

Это поправили разработчики модуля в новой версии модуля.

 

Вот только обновлять сам магазин до 1.5.6.1 не спешите, там похоже косяк с импортом CSV...

  • Like 2
Link to comment
Share on other sites

Google не кушает дату в формате 0000-00-00, а кушает в формате date('c',strtotime($product->date_upd))  и только.

Это поправили разработчики модуля в новой версии модуля.

 

Вот только обновлять сам магазин до 1.5.6.1 не спешите, там похоже косяк с импортом CSV...

Какой косяк??? Я обновляю 25000 товаров при помощи Store Manager for Prestashop. И слава богу пока не поставил 1.5.6.1, но очень хотел поставить))) Спасибо за предупреждение, но очень хочется знать какие там есть косяки в новой версии. Как никак магазин с таким количеством товаров рушить никак не хочется))

Link to comment
Share on other sites

Какой косяк??? Я обновляю 25000 товаров при помощи Store Manager for Prestashop. И слава богу пока не поставил 1.5.6.1, но очень хотел поставить))) Спасибо за предупреждение, но очень хочется знать какие там есть косяки в новой версии. Как никак магазин с таким количеством товаров рушить никак не хочется))

 

http://www.prestashop.com/forums/topic/290541-%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82-%D0%B8%D0%B7-csv-presta-1561/

Link to comment
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
×
×
  • Create New...