Видеомикроразметка schema.org на DLE
Актуальная микроразметка от schema.org для видео сайта на DLE. Рекомендуется для применения опытными пользователями, которые знают для чего это.
Доп. поля
Для начала советую ознакомится с самой структурой построения: Movie - schema.org. Для себя были выбраны следующие поля:
contributor или countryOfOrigin (лучше первое) - Страна
copyrightyear - Год
genre - Жанр (если у вас категории являются жанром, то пропускаем)
director - Режиссёр
creator - Сценарист
musicBy - Композитор
editor - Монтаж
producer - Продюсер
provider - Оператор
translator - Перевод / озвучание
actor - Актёры
Важно: нужно создать именно такие поля с такими названиями. Они должны называться ИМЕННО ТАК и никак иначе! Не обязательно использовать все поля, но если будете - то только такие! Каждое поле с функцией "Использовать при желании ", можно оставить поле пуcтым, и "Использовать значения полей как перекрестные гиперссылки ".
Однако, нам понадобятся другие поля. Поля для: ID с Кинопоиска, постера, русского названия, оригинального названия, ссылки(!) для трейлера, ссылки для видео, продолжительности самого фильма (в формате ЧЧ:ММ:СС). Поле короткой и полной новости будет использовано для описания. На этой стадии вы должны определиться что вы хотите видеть у себя на сайте.
Если у вас уже есть поля и вы захотите заменить на вышеупомянутые, то вам следует сначала сделать так:
- Идём в phpMyAdmin и в нужной базе данных выполняем SQL запрос:
UPDATE `dle_post` SET `xfields`=REPLACE(`xfields`,'Старое_Название','Новое_Название');
- Открываем engine/data/xfields.txt и меняем поля.
- В админпанели DLE, в меню Управление доп.полями выбираем любое на редактирование и пере сохраняем его.
- Чистим кеш.
Полная новость (templates/шаблон/fullstory.tpl):
Начнём с простого - cоздаём поля. Далее открываем 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]">
Где Х - меняем на ID категории, которая предназначена для "взрослых" (к.п. Жанр "Эротика"). А если и это вас не устраивает, то вот еще вариант:
<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]
- trailer - название поля куда вводится ссылка на трейлер, меняем на своё.
- video - название поля куда вводится ссылка на видео, меняем на своё.
Далее, желательно тег {title} обернуть ссылкой на новость, примерно так:
<a itemprop="url" href="{full-link}">{title}</a>
itemprop="url" - этот тег нужен для разметки, который указывает на страницу записи.
Можно и так сделать, в самом начале документа после:
<div itemscope itemtype="http://schema.org/Movie">
Добавляем:
<link itemprop="url" href="{full-link}">
Однако, при этом теряется описание ссылки, посему выбирать вам.
Далее прописываем доп. поля, например - Русское название:
<span itemprop="name">[xfvalue_name]</span>
Оригинальное название:
<span itemprop="alternateName">[xfvalue_nameo]</span>
Продолжительность:
<span itemprop="duration">[xfvalue_time]</span>
ID с кинопоиска:
<noindex><a href="http://www.kinopoisk.ru/level/1/film/[xfvalue_kpid]/" target="_blank" itemprop="sameAs">Открыть на кинопоиске</a></noindex>
Постер:
<img itemprop="image" src="{image-1}" title="{title}">
Описание:
<div itemprop="description">{full-story}</div>
Поля меняем на свои.
Дальше (опционально), если вы используете вывод количества комментариев, то оборачиваем {comments-num} в:
<span itemprop="commentCount">{comments-num}</span>
Чтобы обработать рейтинг в звёзды, добавляем следующее:
<div itemprop="aggregateRating"
itemscope itemtype="http://schema.org/AggregateRating">
<link itemprop="itemReviewed" content="{full-link}">
[rating]<div style="float:left;width:100px;">Рейтинг:</div>{rating}<div style="float:left;width:120px;">(голосов: {vote-num})</div>[/rating]
</div>
Cделаем сразу разметку для видеофайла (рекомендуется трейлер), после:
<div itemscope itemtype="http://schema.org/Movie">
Добавим:
<div itemprop="video" itemscope itemtype="http://schema.org/VideoObject">
<link itemprop="thumbnail" href="{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="http://kinospace.org/play/{kp_id}/" />
<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} - это постер
- http://kinospace.org/play/{kp_id}/- ссылка на видео файл или трейлер
меняем на своё.
Главная страница (templates/шаблон/main.tpl):
К тегу бади добавляем начальную структуру, чтобы выглядело так:
<body itemscope itemtype="http://schema.org/WebPage">
Комментарии (templates/шаблон/comments.tpl)*
Этот шаг опционален, не столь важен, но всё же рекомендуется.
В начало шаблона добавляем:
<div itemprop="comment" itemscope itemtype="http://schema.org/Comment">
<meta itemprop="dateCreated" content="{date=Y-m-d}">
<meta itemprop="author" content="{login}">
<span itemprop="contentRating" style="display:none;">{rating}</span>
В конец:
</div>
Cтрочка:
<span itemprop="contentRating" style="display:none;">{rating}</span>
для тех, кто использует рейтинг в комментариях. Рейтинг должен быть именно цифровой. К аватарке добавляем значение image, чтобы это выглядело так:
<img itemprop="image" src="{foto}" width="100" height="100" class="img-responsive avatar" alt="Аватарка {login}'a">
Сам комментарий также оборачиваем:
<span itemprop="text">{comment}</span>
Если используете рейтинг "нравится" и "не нравится", то оберните его следующим образом (тестировалось на DLE 11):
<div class="rating" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
<link itemprop="itemReviewed" content="{news-link}#com-{comment-id}">
<div class="mwrating">
<div style="display:none;">
<span itemprop="ratingCount">{rating}</span>
<span itemprop="reviewCount">{rating}</span>
[negative-comment]<meta itemprop="bestRating" content="0">[/negative-comment]
[positive-comment]<span itemprop="bestRating">{rating}</span>[/positive-comment]
[neutral-comment]<span itemprop="bestRating">{rating}</span>[/neutral-comment]
[negative-comment]<span itemprop="worstRating">{rating}</span>[/negative-comment]
[positive-comment]<span itemprop="worstRating">0</span>[/positive-comment]
[neutral-comment]<span itemprop="worstRating">0</span>[/neutral-comment]
</div>
<div class="wmminus">[rating-minus]-[/rating-minus]</div>
<div class="mwrat" itemprop="ratingValue">{rating}</div>
<div class="wmplus">[rating-plus]+[/rating-plus]</div>
</div>
</div>
Хлебные крошки (templates/шаблон/speedbar.tpl):
Заменяем всё содержимое на:
{speedbar}
Далее открываем templates/шаблон/стили/engine.css и в самый низ добавляем (если у вас шаблон на основе бутстрапа 3, то пропускаем шаг):
ol[typeof=BreadcrumbList]
{
display:inline-block;
list-style:none!important;
}
ol[typeof=BreadcrumbList] > li
{
display:inline-block;
}
.breadcrumb {
padding: 8px 15px;
margin-bottom: 20px;
list-style: none;
background-color: #f5f5f5;
border-radius: 4px;
}
.breadcrumb>li {
display: inline-block;
}
.breadcrumb>li+li:before {
padding: 0 5px;
color: #ccc;
content: "/\00a0";
}
/\00a0 можно заменить на \00BB, это заменит / на »
Далее открываем engine/engine.php и ищем:
if ($config['speedbar'] AND !$view_template ) {
$s_navigation = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"{$config['http_home_url']}\" itemprop=\"url\"><span itemprop=\"title\">" . $config['short_title'] . "</span></a></span>";
if( $config['start_site'] == 3 AND $_SERVER['QUERY_STRING'] == "" AND !$_POST['do']) $titl_e = "";
if (intval($category_id)) $s_navigation .= " {$config['speedbar_separator']} " . get_breadcrumbcategories ( intval($category_id), $config['speedbar_separator'] );
elseif ($do == 'tags') {
if ($config['allow_alt_url']) $s_navigation .= " {$config['speedbar_separator']} <span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"" . $config['http_home_url'] . "tags/\" itemprop=\"url\"><span itemprop=\"title\">" . $lang['tag_cloud'] . "</span></a></span> {$config['speedbar_separator']} " . $tag;
else $s_navigation .= " {$config['speedbar_separator']} <span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"?do=tags\" itemprop=\"url\"><span itemprop=\"title\">" . $lang['tag_cloud'] . "</span></a></span> {$config['speedbar_separator']} " . $tag;
} elseif ($nam_e) $s_navigation .= " {$config['speedbar_separator']} " . $nam_e;
if ($titl_e) $s_navigation .= " {$config['speedbar_separator']} " . $titl_e;
else {
if ( isset($_GET['cstart']) AND intval($_GET['cstart']) > 1 ){
$page_extra = " {$config['speedbar_separator']} ".$lang['news_site']." ".intval($_GET['cstart']);
} else $page_extra = '';
$s_navigation .= $page_extra;
}
$tpl->load_template ( 'speedbar.tpl' );
$tpl->set ( '{speedbar}', '<span id="dle-speedbar">' . stripslashes ( $s_navigation ) . '</span>' );
$tpl->compile ( 'speedbar' );
$tpl->clear ();
}
Меняем на:
if ($config['speedbar'] AND !$view_template ) {
$s_navigation = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"{$config['http_home_url']}\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">" . $config['short_title'] . "</span></a><meta property=\"position\" content=\"1\"></li>";
if( $config['start_site'] == 3 AND $_SERVER['QUERY_STRING'] == "" AND !$_POST['do']) $titl_e = "";
if (intval($category_id))
{
$cat_breadcrumb = explode("|", get_breadcrumbcategories ( intval($category_id), $config['speedbar_separator'] ));
$s_navigation .= " {$config['speedbar_separator']} " . $cat_breadcrumb[0];
}
elseif ($do == 'tags') {
if ($config['allow_alt_url']) $s_navigation .= " {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"" . $config['http_home_url'] . "tags/\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">" . $lang['tag_cloud'] . "</span></a><meta property=\"position\" content=\"2\"></li> {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">" . $tag . "</span><meta property=\"position\" content=\"3\"></li>";
else $s_navigation .= " {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"?do=tags\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">" . $lang['tag_cloud'] . "</span></a><meta property=\"position\" content=\"2\"></li> {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">" . $tag . "</span><meta property=\"position\" content=\"3\"></li>";
} elseif ($nam_e)
{
if($dle_module == "showfull")
{
$cat_breadcrumb[1] = $cat_breadcrumb[1] + 1;
$s_navigation .= " {$config['speedbar_separator']} " . "<li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$nam_e}</span><meta property=\"position\" content=\"{$cat_breadcrumb[1]}\"></li>";
}
else
{
$s_navigation .= " {$config['speedbar_separator']} " . "<li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$nam_e}</span><meta property=\"position\" content=\"2\"></li>";
}
}
if ($titl_e)
{
if(isset($cat_breadcrumb[1]) && !is_null($cat_breadcrumb[1]))
$cat_breadcrumb[1] = $cat_breadcrumb[1] + 1;
else
$cat_breadcrumb[1] = 3;
$s_navigation .= " {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$titl_e}</span><meta property=\"position\" content=\"{$cat_breadcrumb[1]}\"></li>";
}
else {
if ( isset($_GET['cstart']) AND intval($_GET['cstart']) > 1 ){
$cat_breadcrumb[1]++;
$page_extra = " {$config['speedbar_separator']} <li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">".$lang['news_site']." ".intval($_GET['cstart']) . "</span><meta property=\"position\" content=\"{$cat_breadcrumb[1]}\"></li>";
} else $page_extra = '';
$s_navigation .= $page_extra;
}
$tpl->load_template ( 'speedbar.tpl' );
$tpl->set ( '{speedbar}', '<ol vocab="http://schema.org/" typeof="BreadcrumbList">' . stripslashes ( $s_navigation ) . '</ol>' );
$tpl->compile ( 'speedbar' );
$tpl->clear ();
}
Открываем engine/modules/functions.php и ищем:
function get_breadcrumbcategories($id, $separator="»") {
global $cat_info, $config, $PHP_SELF;
if( ! $id ) return;
$parent_id = $cat_info[$id]['parentid'];
if( $config['allow_alt_url'] ) $list = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"" . $config['http_home_url'] . get_url( $id ) . "/\" itemprop=\"url\"><span itemprop=\"title\">{$cat_info[$id]['name']}</span></a></span>";
else $list = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"$PHP_SELF?do=cat&category={$cat_info[$id]['alt_name']}\" itemprop=\"url\"><span itemprop=\"title\">{$cat_info[$id]['name']}</span></a></span>";
while ( $parent_id ) {
if( $config['allow_alt_url'] ) $list = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"" . $config['http_home_url'] . get_url( $parent_id ) . "/\" itemprop=\"url\"><span itemprop=\"title\">{$cat_info[$parent_id]['name']}</span></a></span>" . " {$separator} " . $list;
else $list = "<span itemscope itemtype=\"http://data-vocabulary.org/Breadcrumb\"><a href=\"$PHP_SELF?do=cat&category={$cat_info[$parent_id]['alt_name']}\" itemprop=\"url\"><span itemprop=\"title\">{$cat_info[$parent_id]['name']}</span></a></span>" . " {$separator} " . $list;
$parent_id = $cat_info[$parent_id]['parentid'];
if($parent_id) {
if( $cat_info[$parent_id]['parentid'] == $cat_info[$parent_id]['id'] ) break;
}
}
return $list;
}
Меняем на:
function get_breadcrumbcategories($id, $separator="»") {
global $cat_info, $config, $PHP_SELF, $dle_module;
if( ! $id ) return;
$parent_id = $cat_info[$id]['parentid'];
$first_id_p = $parent_id;
$i = 1;
while($parent_id)
{
$i++;
$parent_id = $cat_info[$parent_id]['parentid'];
if($parent_id)
if( $cat_info[$parent_id]['parentid'] == $cat_info[$parent_id]['id'] ) break;
}
$i += 1;
$parent_id = $first_id_p;
if($parent_id == 0)
{
$id_i = 2;
if($dle_module == "cat")
{
if( $config['allow_alt_url'] ) $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$cat_info[$id]['name']}</span><meta property=\"position\" content=\"2\"></li>";
else $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><span itemprop=\"title\">{$cat_info[$id]['name']}</span><meta property=\"position\" content=\"2\"></li>";
}
else
{
if( $config['allow_alt_url'] ) $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"" . $config['http_home_url'] . get_url( $id ) . "/\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$id]['name']}</span></a><meta property=\"position\" content=\"2\"></li>";
else $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"$PHP_SELF?do=cat&category={$cat_info[$id]['alt_name']}\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$id]['name']}</span></a><meta property=\"position\" content=\"2\"></li>";
}
}
else
{
$id_i = 3;
if($dle_module == "cat")
{
if( $config['allow_alt_url'] ) $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$cat_info[$id]['name']}</span><meta property=\"position\" content=\"{$i}\"></li>";
else $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><span itemprop=\"title\">{$cat_info[$id]['name']}</span><meta property=\"position\" content=\"{$i}\"></li>";
}
else
{
if( $config['allow_alt_url'] ) $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"" . $config['http_home_url'] . get_url( $id ) . "/\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$id]['name']}</span></a><meta property=\"position\" content=\"3\"></li>";
else $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"$PHP_SELF?do=cat&category={$cat_info[$id]['alt_name']}\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$id]['name']}</span></a><meta property=\"position\" content=\"3\"></li>";
}
}
while ( $parent_id ) {
$i--;
if($dle_module != "cat")
{
if( $config['allow_alt_url'] ) $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"" . $config['http_home_url'] . get_url( $parent_id ) . "/\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$parent_id]['name']}</span></a><meta property=\"position\" content=\"{$i}\"></li>" . " {$separator} " . $list;
else $list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a href=\"$PHP_SELF?do=cat&category={$cat_info[$parent_id]['alt_name']}\" property=\"item\" typeof=\"WebPage\"><span property=\"name\">{$cat_info[$parent_id]['name']}</span></a><meta property=\"position\" content=\"{$i}\"></li>" . " {$separator} " . $list;
}
else
{
if($id != $cat_info[$parent_id]['id'])
$list = "<li property=\"itemListElement\" typeof=\"ListItem\"><a property=\"item\" typeof=\"WebPage\" href=\"" . $config['http_home_url'] . get_url( $parent_id ) . "\"><span property=\"name\">{$cat_info[$parent_id]['name']}</span></a><meta property=\"position\" content=\"{$i}\"></li>" . " {$separator} " . $list;
else
$list = "<li property=\"itemListElement\" typeof=\"ListItem\"><span property=\"name\">{$cat_info[$parent_id]['name']}</span><meta property=\"position\" content=\"{$i}\"></li>" . " {$separator} " . $list;
}
$parent_id = $cat_info[$parent_id]['parentid'];
if($parent_id) {
if( $cat_info[$parent_id]['parentid'] == $cat_info[$parent_id]['id'] ) break;
}
}
return $list . "|" . $id_i;
}
Рейтинг - настройка вывода. В engine/modules/functions.php ищем:
<div id='ratig-layer-{$id}'><div class="rating">
<ul class="unit-rating">
<li class="current-rating" style="width:{$rating}%;">{$rating}</li>
<li><a href="#" title="{$lang['useless']}" class="r1-unit" onclick="doRate('1', '{$id}'); return false;">1</a></li>
<li><a href="#" title="{$lang['poor']}" class="r2-unit" onclick="doRate('2', '{$id}'); return false;">2</a></li>
<li><a href="#" title="{$lang['fair']}" class="r3-unit" onclick="doRate('3', '{$id}'); return false;">3</a></li>
<li><a href="#" title="{$lang['good']}" class="r4-unit" onclick="doRate('4', '{$id}'); return false;">4</a></li>
<li><a href="#" title="{$lang['excellent']}" class="r5-unit" onclick="doRate('5', '{$id}'); return false;">5</a></li>
</ul>
</div></div>
Меняем на:
<div id='ratig-layer-{$id}'><div class="rating">
<ul class="unit-rating">
<li itemprop="ratingValue" class="current-rating" style="width:{$rating}%;">{$rating}</li>
<li itemprop="worstRating"><a href="#" title="{$lang['useless']}" class="r1-unit" onclick="doRate('1', '{$id}'); return false;">1</a></li>
<li><a href="#" title="{$lang['poor']}" class="r2-unit" onclick="doRate('2', '{$id}'); return false;">2</a></li>
<li><a href="#" title="{$lang['fair']}" class="r3-unit" onclick="doRate('3', '{$id}'); return false;">3</a></li>
<li><a href="#" title="{$lang['good']}" class="r4-unit" onclick="doRate('4', '{$id}'); return false;">4</a></li>
<li itemprop="bestRating"><a href="#" title="{$lang['excellent']}" class="r5-unit" onclick="doRate('5', '{$id}'); return false;">5</a></li>
</ul>
</div></div>
Готово!
• Автор: Maxim Harder
• Источник
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.