Микроразметка. Дата должны быть в формате ISO 8601

Предлагаю решение проблемы

#1 12 марта 2013 в 12:25
Сразу переду к делу.

Оптимизируя сайт под поисковики я проверил новостной пост через сервис webmaster.yandex.ru/microtest.xml где мне выдали предупреждение что:

ПРЕДУПРЕЖДЕНИЕ: значение "10-марта-2013" в поле datePublished не является корректными значением даты. Дата должна быть в формате ISO 8601

Валидатор микроразметки

Как мы знаем формат ISO 8601 требует от нас чтобы дата выглядела так 2013-04-10

Решается проблема просто открываем файл core/cms.php

Находим следующие строчки у меня это 2788
  1. // Замена числового обозначения месяца на словесное (склоненное в падеже)
  2. if ($is_full_m){
  3. $m = str_replace($month_int, $month_full_str, $m);
  4. }else{
  5. $m = str_replace($month_int, $month_short_str, $m);
  6. }
  7. // Замена чисел 01 02 на 1 2
  8. $d = str_replace($day_int, $day_norm, $d);
  9. // Формирование окончательного результата
  10. $result = $d.'-'.$m.'-'.$y;
И заменяем на следующий код
  1. // Замена числового обозначения месяца на словесное (склоненное в падеже)
  2. //if ($is_full_m){
  3. // $m = str_replace($month_int, $month_full_str, $m);
  4. //}else{
  5. // $m = str_replace($month_int, $month_short_str, $m);
  6. //}
  7. // Замена чисел 01 02 на 1 2
  8. //$d = str_replace($day_int, $day_norm, $d);
  9. // Формирование окончательного результата
  10. //$result = $d.'-'.$m.'-'.$y;
  11. $result = $y.'-'.$m.'-'.$d;
Как мы видим ничего сложного, я закомментировал лишнее, что мешает валидатору определить корректно дату и
в строчке
  1. $result = $d.'-'.$m.'-'.$y;
поменял местами $d и $y, в результате получил
  1. $result = $y.'-'.$m.'-'.$d;
Сохраняем, проверяем ваш пост через через сервис webmaster.yandex.ru/microtest.xml. Все работает отлично.

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

И еще дополнение избавился от слов Сегодня и Вчера которые мешали валидатору.
Закомментировал следующие строчки в в том же файле. У меня это начинается со строки 2742
  1. // Если дата совпадает с сегодняшней
  2. //case $today:
  3. //$result = ''.$_LANG['TODAY'].'';
  4. //if ($is_now_time && $time) {
  5. //list($h, $m, $s) = explode(':', $time);
  6. //$result .= ' '.$_LANG['IN'].' '.$h.':'.$m;
  7. //}
  8. //break;
  9. //Если дата совпадает со вчерашней
  10. //case $yesterday:
  11. //$result = ''.$_LANG['YESTERDAY'].'';
  12. //if ($is_now_time && $time) {
  13. //list($h, $m, $s) = explode(':', $time);
  14. //$result .= ' '.$_LANG['IN'].' '.$h.':'.$m;
  15. //}
  16. //break;
#2 12 марта 2013 в 12:29
Не понимаю о чем вы пишите (не касался этой темы), но + для блога поставлю.
#3 12 марта 2013 в 12:49


Не понимаю о чем вы пишите (не касался этой темы), но + для блога поставлю.

SpideR-KOSS

Для блогов и новостей я сделал разметку Schema.
Валидатор микроразметки позволяет проверить семантическую разметку, внедренную на вашем сайте, и убедиться в том, что роботы поисковых систем cмогут извлечь структурированные данные.

И я еще дополнил тему. Избавился от слов Сегодня и Вчера.
#4 17 февраля 2014 в 16:21
Хорошая тема!
А может кто нибудь подсказать, есть ли теги для даты регистрации и последнего посещения пользователем?
Тоесть:
itemscope itemtype="http://schema.org/Person"
itemprop="???"
#5 18 февраля 2014 в 12:12
Эльдар, Сделал как тут описано, но при проверке в яндексе выдает ошибку формата даты. версия 10.3

ПРЕДУПРЕЖДЕНИЕ: значение "" в поле datePublished не является корректными значением даты. Дата должна быть в формате ISO 8601

#6 18 февраля 2014 в 13:17
Для этого не нужно править cms.php. В этом случае даты изменятся на всем сайте.
Достаточно в шаблоне вместо {$article.fpubdate} использовать {$article.pubdate} — это поле содержит дату уже в ISO 8601. Аналогично и с блогами.
#7 18 марта 2014 в 19:52


Для этого не нужно править cms.php. В этом случае даты изменятся на всем сайте.
Достаточно в шаблоне вместо {$article.fpubdate} использовать {$article.pubdate} — это поле содержит дату уже в ISO 8601. Аналогично и с блогами.

r2

  1. $article['pubdate'] = cmsCore::dateFormat($article['pubdate']);
не даёт сделать так, как вы говорите.
#8 6 декабря 2014 в 19:56

Достаточно в шаблоне вместо {$article.fpubdate} использовать {$article.pubdate} — это поле содержит дату уже в ISO 8601.

r2
R2. добрый день. О каком шаблоне идет речь? В com_content_read стоит {$article.pubdate}, но результат не удовлетворяет яндекс
#9 5 января 2015 в 01:25
Разобрался. Действительно — хакать ничего не нужно. Достаточно в шаблоне, например, com_content_read.tpl поставить следующую конструкцию
  1. {$article.pubdate|date_format:"%Y-%m-%d"}
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.