Schema.org
Schema.org — это стандарт семантической разметки данных в сети, объявленный поисковыми системами Google, Bing и Yahoo! летом 2011 года.
Цель семантической разметки – сделать интернет более понятным, структурированным и облегчить поисковым системам и специальным программам извлечение и обработку информации для удобного её представления в результатах поиска.
Разметка происходит непосредственно в HTML-коде страниц с помощью специальных атрибутов и не требует создания отдельных экспортных файлов.
Зачем нужна микроразметка
Используя семантическую разметку, вы можете улучшить представление сниппета вашего сайта в результатах поиска.
Сравните сниппеты в поисковой выдаче для страницы сайта, участвующего в партнерской программе Яндекс.Словарей – неразмеченного и размеченного семантической версткой.
- Сайт не использует семантическую разметку:
![]()
- Сайт использует семантическую разметку:
Стандарт представляет из себя набор классов, описывающих всевозможные сущности и их свойства. Сейчас их уже несколько сотен. Постоянно идет работа по улучшению стандарта, добавляются новые свойства, уточнятся существующие.![]()
Познакомиться с описанием стандарта можно на официальном сайте в разделе документация.
Также существует неофициальный и пока неполный перевод стандарта на русский язык на сайте: http://ruschema.org/.
От себя добавлю, разметка помогает пользователям ищущим информацию быстро найти нужную ему. Удобно, быстро и доступно 😉
Итак, давайте начнём. Начнём с самого начала, для полной разметки, вы должны создать огромное кол-во доп. полей для правильного вывода информации. Нужно (!) создать следующие поля со следующими названиями (одно поле с функцией "Использовать при желании (можно оставить поле пуcтым)" и "Использовать значения полей как перекрестные гиперссылки "):
contributor или countryOfOrigin (лучше первое) - Страна
copyrightyear - Год
genre - Жанр (если у вас категории являются жанром, то пропускаем)
director - Режиссёр
creator - Сценарист
musicBy - Композитор
editor - Монтаж
producer - Продюсер
provider - Оператор
translator - Перевод / озвучание
actor - Актёры
Эти поля должны называться ИМЕННО ТАК! Никак иначе!!! Не обязательно использовать все поля, но если будете - то только такие! Однако, нам понадобятся другие поля. Поля для: ID с кинопоиска, постера, русского названия, оригинального названия, ссылки(!) для трейлера, ссылки для видео (покажу как реализовать вывод плеера на отдельной странице), продолжительности самого фильма (в формате ЧЧ:ММ:СС). Поле короткой и полной новости будет использовано для описания.
На этой стадии вы должны определиться что вы хотите видеть у себя на сайте.
============================
Начнём с простого. Создаём поля. Далее идём к шаблонам. Открываем fullstory.tpl. В самое начало ставим
а в конец
А тут
я использовал это. Если вы не можете себе этого позволить, то меняем на это
Х меняем на ID категории, которая предназначена для "взрослых" (к.п. Жанр "Эротика"). А если и это вас не устраивает, то вот:
trailer - это название поля, куда вводится ссылка на трейлер. Меняем на своё.
video - это название поля, куда вводится ссылка на видео. Меняем на своё.
{print-link} - об этом ниже
Далее, желательно тег {title} обернуть ссылкой на новость, примерно так:
itemprop="url" - этот тег нужен для разметки, который указывает на страницу записи.
Далее. Прописываем доп. поля. Пример:
Русское название
Оригинальное название
Продолжительность
ID с кинопоиска
Тут использовал этот мод: http://zerocoolpro.biz/forum/threads/parser-kinopoisk-pkinopoisk-v3-3-0-otkrytyj-kod-skachat.392/
{kp_id} - меняем на ваше поле!!!
Постер
Описание
Поля меняем на свои
Дальше (опционально), если вы используете вывод кол-во комментариев, то оборачиваем {comments-num} в
============================
Открываем comments.tpl
{comment} меняем на
============================
Переходим к php файлам. Открываем engine/modules/show.full.php
Если вы используете категории движка как жанры, то следуем этим пунктам
ищем
и
после добавляем
Далее ищем дважды
и
после добавляем
после этого все значения доп. полей, которые имеют включенную функцию перекрёстных ссылок будут выводится в микроразметке как надо.
Теперь, если вы хотите выводить плеер на отдельной странице, нужно понять, что от функции "Печать страницы" нужно будет отказаться, ибо мы будем замещать её.
ищем
и меняем на
============================
Открываем print.tpl
Меняем всё на
============================
Теперь, давайте дадим разметку видеофайлу. Открываем fullstory.tpl.
и после
ставим
меняем на своё
аналогия сверху
============================================
Если у вас трейлер подключался при помощи тега video, то открываем engine/classes/parse.classes.php и заменяем функцию
на
затем перестраиваем публикации и чистим кеш
=============================
Думаю, на этом всё. если, что-то вспомнится - дополню.
P.S. если у вас уже есть поля и вы захотите заменить на вышеупомянутые, то вам следует сначала сделать так.
=========================
Проверить результат можно здесь: Яндекс или Google
Яндекс может выдавать ошибку из-за того, что некоторые теги прописываются маленькими буквами - не волнуйтесь, так и с датой.
contributor или countryOfOrigin (лучше первое) - Страна
copyrightyear - Год
genre - Жанр (если у вас категории являются жанром, то пропускаем)
director - Режиссёр
creator - Сценарист
musicBy - Композитор
editor - Монтаж
producer - Продюсер
provider - Оператор
translator - Перевод / озвучание
actor - Актёры
Эти поля должны называться ИМЕННО ТАК! Никак иначе!!! Не обязательно использовать все поля, но если будете - то только такие! Однако, нам понадобятся другие поля. Поля для: ID с кинопоиска, постера, русского названия, оригинального названия, ссылки(!) для трейлера, ссылки для видео (покажу как реализовать вывод плеера на отдельной странице), продолжительности самого фильма (в формате ЧЧ:ММ:СС). Поле короткой и полной новости будет использовано для описания.
На этой стадии вы должны определиться что вы хотите видеть у себя на сайте.
============================
Начнём с простого. Создаём поля. Далее идём к шаблонам. Открываем fullstory.tpl. В самое начало ставим
Код:
<div itemscope itemtype="http://schema.org/Movie">
<meta itemprop="dateCreated" content="{date=Y-m-d}">
<meta itemprop="inLanguage" content="ru">
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
[xfgiven_trailer]<link itemprop="trailer" value="[xfvalue_trailer]">[/xfgiven_trailer]
[xfgiven_video]<link itemprop="video" value="{print-link}">[/xfgiven_video]
Код:
</div>
Код:
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
Код:
<meta itemprop="isFamilyFriendly" content="[catlist=X]false[/catlist][not-catlist=X]True[/not-catlist]">
Код:
<meta itemprop="isFamilyFriendly" content="True">
Код:
[xfgiven_trailer]<link itemprop="trailer" value="[xfvalue_trailer]">[/xfgiven_trailer]
[xfgiven_video]<link itemprop="video" value="{print-link}">[/xfgiven_video]
video - это название поля, куда вводится ссылка на видео. Меняем на своё.
{print-link} - об этом ниже
Далее, желательно тег {title} обернуть ссылкой на новость, примерно так:
Код:
<a itemprop="url" href="{full-link}">{title}</a>
Далее. Прописываем доп. поля. Пример:
Русское название
Код:
<span itemprop="name">[xfvalue_name]</span>
Код:
<span itemprop="alternateName">[xfvalue_nameo]</span>
Код:
<span itemprop="duration">[xfvalue_time]</span>
Код:
<noindex><a href="http://www.kinopoisk.ru/level/1/film/{kp_id}/" target="_blank" itemprop="sameAs"><img class="kp" title="Страница на KinoPoisk.ru (откроется в новом окне)" alt="Страница на KinoPoisk.ru (откроется в новом окне)" src="http://cnd.kinospace.org/ratingkpimdb/rating.php?kp_id={kp_id}&style=1&style_type=png&expect=43200"></a></noindex>
{kp_id} - меняем на ваше поле!!!
Постер
Код:
<img itemprop="image" src="{image-1}" title="{title}">
Код:
<div itemprop="description">{full-story}</div>
Дальше (опционально), если вы используете вывод кол-во комментариев, то оборачиваем {comments-num} в
Код:
<span itemprop="commentCount">{comments-num}</span>
============================
Открываем comments.tpl
{comment} меняем на
Код:
<span itemprop="comment">{comment}</span>
============================
Переходим к php файлам. Открываем engine/modules/show.full.php
Если вы используете категории движка как жанры, то следуем этим пунктам
ищем
Код:
if( $config['allow_alt_url'] ) $my_cat_link[] = "<a
Код:
else $my_cat_link[] = "<a
Код:
itemprop=\"genre\"
Далее ищем дважды
Код:
if( $config['allow_alt_url'] ) $value3[] = "<a
Код:
else $value3[] = "<a
Код:
itemprop=\"" . urlencode( $preg_safe_name ) . "\"
Теперь, если вы хотите выводить плеер на отдельной странице, нужно понять, что от функции "Печать страницы" нужно будет отказаться, ибо мы будем замещать её.
ищем
Код:
if ($config['allow_search_print']) {
$tpl->set( '[print-link]', "<a href=\"" . $print_link . "\">" );
$tpl->set( '[/print-link]', "</a>" );
} else {
$tpl->set( '[print-link]', "<a href=\"" . $print_link . "\" rel=\"nofollow\">" );
$tpl->set( '[/print-link]', "</a>" );
}
Код:
if ($config['allow_search_print']) {
$tpl->set( '{print-link}', $print_link );
} else {
$tpl->set( '{print-link}', $print_link );
}
============================
Открываем print.tpl
Меняем всё на
Код:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
<title>Плеер к {title}</title>
<style>
iframe {
width: 100%;
height: 100%;
display: block;
margin: 0;
padding: 0;
position: absolute;
top: 0;
left: 0;
}
</style>
<script type="text/javascript" src="http://сайт/engine/classes/js/jquery.js"></script>
<script type="text/javascript" src="http://сайт/engine/classes/js/jqueryui.js"></script>
<script type="text/javascript" src="http://сайт/engine/classes/js/dle_js.js"></script>
</head>
<body bgcolor="#ffffff" text="#000000">
Вывод плеера, смотрите документацию к плееру или моду
</body>
</html>
============================
Теперь, давайте дадим разметку видеофайлу. Открываем fullstory.tpl.
и после
Код:
<div itemscope itemtype="http://schema.org/Movie">
Код:
<div itemprop="video" itemscope itemtype="http://schema.org/VideoObject">
<link itemprop="thumbnail" content="{image-1}" />
<img itemprop="thumbnailUrl" src="{image-1}" title="{title}" style="display:none;">
<meta itemprop="description" content="{full-story}" />
<meta itemprop="name" content="{title}" />
<meta itemprop="uploadDate" content="{date=Y-m-d}T{date=G:i:s}" />
<meta itemprop="datePublished" content="{date=Y-m-d}">
<link itemprop="url" href="{print-link}" />
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
<meta itemprop="duration" content="[xfvalue_time]" />
</div>
Код:
{image-1},[xfvalue_time]
Код:
<meta itemprop="isFamilyFriendly" content="[if xfvalue_age>=16]false[/if][if xfvalue_age<=15]True[/if]">
============================================
Если у вас трейлер подключался при помощи тега video, то открываем engine/classes/parse.classes.php и заменяем функцию
Код:
function build_video( $matches=array() ) {
...
}
на
Код:
function build_video( $matches=array() ) {
global $config;
$url = $matches[1];
if (!count($this->video_config)) {
include (ENGINE_DIR . '/data/videoconfig.php');
$this->video_config = $video_config;
}
$get_size = array();
$sizes = array();
$get_size = explode( ",", trim( $url ) );
if (count($get_size) > 1 AND ( stripos ( $get_size[0], "http" ) === false OR stripos ( $get_size[0], "rtmp:" ) === false ) ) {
$sizes = explode( "x", trim( $get_size[0] ) );
if (count($sizes) == 2) {
$width = intval($sizes[0]) > 0 ? intval($sizes[0]) : $this->video_config['width'];
$height = intval($sizes[1]) > 0 ? intval($sizes[1]) : $this->video_config['height'];
if (substr ( $sizes[0], - 1, 1 ) == '%') $width = $width."%";
if (substr ( $sizes[1], - 1, 1 ) == '%') $height = $height."%";
} else {
$width = $this->video_config['width'];
$height = $this->video_config['height'];
}
} else {
$width = $this->video_config['width'];
$height = $this->video_config['height'];
}
if (count($get_size) == 3) $url = $get_size[1].",".$get_size[2];
elseif (count($get_size) == 2 AND count($sizes) == 2) $url = $get_size[1];
$option = explode( "|", trim( $url ) );
$url = $this->clear_url( $option[0] );
$type = explode( ".", $url );
$type = strtolower( end( $type ) );
if( preg_match( "/[?&;<\[\]]/", $url ) ) {
return "[video=" . $url . "]";
}
if( $option[1] != "" ) {
$option[1] = htmlspecialchars( strip_tags( stripslashes( $option[1] ) ), ENT_QUOTES, $config['charset'] );
$decode_url = $url . "|" . $option[1];
} else
$decode_url = $url;
if ( count($sizes) == 2 ) $decode_url = $width."x".$height.",".$decode_url;
if ( stripos ( $url, "rtmp:" ) === false ) $detect_rtmp = false; else $detect_rtmp = true;
if( $type == "flv" OR $type == "f4v" OR $type == "mp4" OR $type == "m4v" OR $type == "m4a" OR $type == "mov" OR $detect_rtmp) {
if( $this->video_config['flv_watermark'] ) $watermark = "&showWatermark=true&watermarkPosition={$this->video_config['flv_watermark_pos']}&watermarkMargin=0&watermarkAlpha={$this->video_config['flv_watermark_al']}&watermarkImageUrl={THEME}/dleimages/flv_watermark.png";
else $watermark = "&showWatermark=false";
if( $option[1] != "" ) {
$preview = "&showPreviewImage=true&previewImageUrl=".$option[1];
} else {
$preview = "&showPreviewImage=true&previewImageUrl={THEME}/dleimages/videopreview.jpg";
}
$id_player = md5( microtime() );
$list = explode( ",", $url );
$url = trim($list[0]);
if (count($list) > 1 ){
$url_hd = trim($list[1]);
} else {
$url_hd = '';
}
if ( $detect_rtmp ) {
$video_url = "&rtmpURI=".$url."&videoUrl=".$url_hd;
} else {
$video_url = "&videoUrl=".$url."&videoHDUrl=".$url_hd;
}
if( $type == "mp4" OR $type == "m4v" OR $type == "m4a" OR $type == "mov" ) {
if( $option[1] != "" ) {
$preview = $option[1];
} else {
$preview = "";
}
if( $this->video_config['preload'] ) $preload = "metadata";
else $preload = "none";
return "<!--dle_video_begin:{$decode_url}--><video itemprop=\"trailer\" itemscope itemtype=\"http://schema.org/VideoObject\" width=\"{$width}\" height=\"{$height}\" preload=\"{$preload}\" poster=\"{$preview}\" controls=\"controls\">
<source itemprop=\"url\" type=\"video/mp4\" src=\"{$url}\"></source>
<link itemprop=\"thumbnail\" href=\"{$preview}\" />
<meta itemprop=\"description\" content=\"Трейлер к фильму\" />
<meta itemprop=\"name\" content=\"Трейлер к фильму\" />
</video><!--dle_video_end-->";
} else {
return "<!--dle_video_begin:{$decode_url}--><object itemprop=\"trailer\" itemscope itemtype=\"http://schema.org/VideoObject\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\" width=\"{$width}\" height=\"{$height}\" id=\"Player-{$id_player}\">
<param name=\"movie\" value=\"" . $config['http_home_url'] . "engine/classes/flashplayer/media_player_v3.swf?stageW={$width}&stageH={$height}&contentType=video{$video_url}{$watermark}{$preview}&isYouTube=false&rollOverAlpha=0.5&contentBgAlpha=0.8&progressBarColor=0xFFFFFF&defaultVolume=1&fullSizeView=3&showRewind=false&showInfo=false&showFullscreen=true&showScale=true&showSound=true&showTime=true&showCenterPlay=true&autoHideNav=true&autoHideNavTime=3&videoLoop=false&defaultBuffer=3\" />
<param name=\"allowFullScreen\" value=\"true\" />
<param name=\"scale\" value=\"noscale\" />
<param name=\"quality\" value=\"high\" />
<param name=\"bgcolor\" value=\"#000000\" />
<param name=\"wmode\" value=\"opaque\" />
<embed src=\"" . $config['http_home_url'] . "engine/classes/flashplayer/media_player_v3.swf?stageW={$width}&stageH={$height}&contentType=video{$video_url}{$watermark}{$preview}&isYouTube=false&rollOverAlpha=0.5&contentBgAlpha=0.8&progressBarColor=0xFFFFFF&defaultVolume=1&fullSizeView=3&showRewind=false&showInfo=false&showFullscreen=true&showScale=true&showSound=true&showTime=true&showCenterPlay=true&autoHideNav=true&autoHideNavTime=3&videoLoop=false&defaultBuffer=3\" quality=\"high\" bgcolor=\"#000000\" wmode=\"opaque\" allowFullScreen=\"true\" width=\"{$width}\" height=\"{$height}\" align=\"middle\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"></embed>
<link itemprop=\"url\" href=\"{$url}\">
<link itemprop=\"thumbnail\" href=\"{$preview}\" />
<meta itemprop=\"description\" content=\"Трейлер к фильму\" />
<meta itemprop=\"name\" content=\"Трейлер к фильму\" />
</object><!--dle_video_end-->";
}
} elseif( $type == "avi" OR $type == "divx" OR $type == "mkv" ) {
$url = htmlspecialchars( trim( $url ) , ENT_QUOTES, $config['charset'] );
return "<!--dle_video_begin:{$decode_url}--><object classid=\"clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616\" width=\"{$width}\" height=\"{$height}\" codebase=\"http://go.divx.com/plugin/DivXBrowserPlugin.cab\">
<param name=\"custommode\" value=\"none\" />
<param name=\"mode\" value=\"zero\" />
<param name=\"minVersion\" value=\"2.0.0\" />
<param name=\"src\" value=\"{$url}\" />
<param name=\"previewImage\" value=\"{$option[1]}\" />
<embed itemprop=\"trailer\" type=\"video/divx\" src=\"{$url}\" custommode=\"none\" width=\"{$width}\" height=\"{$height}\" mode=\"zero\" previewImage=\"{$option[1]}\" minVersion=\"2.0.0\" pluginspage=\"http://go.divx.com/plugin/download/\">
</embed>
</object><!--dle_video_end-->";
} else {
return "[video=" . $url . "]";
}
}
=============================
Думаю, на этом всё. если, что-то вспомнится - дополню.
P.S. если у вас уже есть поля и вы захотите заменить на вышеупомянутые, то вам следует сначала сделать так.
- идём в phpMyAdmin
- в таб SQL
- вставляем:
Код:
UPDATE `dle_post` SET `xfields`=REPLACE(`xfields`,СтароеНазвание','НовоеНазвание'); - открываем /engine/data/xfields.txt и меням поля
- идём в админку
- в управление доп. полями
- выбираем любое на редактирование и пересохраняем его
- чистим кеш
=========================
Проверить результат можно здесь: Яндекс или Google
Яндекс может выдавать ошибку из-за того, что некоторые теги прописываются маленькими буквами - не волнуйтесь, так и с датой.
Демонстрация
=========================
обновил и в архив кинул
Вложения
Последнее редактирование:

