Супербыстрый хостинг на SSD от 115р в месяц   •   Реклама
1 906 просм
34 комм
Поделиться:

Микроразметка второго и третьего типа рейтинга полной новости в DLE

В одной из статей я подробно расписал, как сделать микроразметку рейтинга полной новости в CMS DataLife Engine для первого типа рейтинга.

Первый тип рейтинга, если вы не знаете, – это «оценка», то есть для оценки статьи используется рейтинг в пять звезд, где 1 звезда – минимальная оценка, 5 – максимальная.

Все бы ничего, но как быть в том случае, если материалы на вашем сайте оцениваются вторым типом рейтинга («мне нравится»), или третьим («нравится» / «не нравится»).

Этим вопросом задались читатели нашего сайта, и, немного подумав, я решил как это все можно организовать.

Микроразметка второго типа рейтинга («нравится») полной новости в DLE

Итак, что мы имеем во втором типе рейтинга? Отметку «нравится», то есть количество людей, которым понравилась та или иная новость. Это число мы возьмем за количество проголосовавших, а оценку мы зададим сами. Если число проголосовавших у нас равно 0, то оценка равняется 0, а если больше 0, то, например, 4.5.

1. Подключитесь к вашему сайту по FTP.

2. Откройте файл в папке вашей темы, отвечающий за вид полной новости (чаще всего это файл fullstory.tpl), после чего в самый низ вставьте:

<div temprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">
	
	<meta itemprop="bestRating" content="5" />
	<meta itemprop="ratingValue" content="{numb_rate}" />
	<meta itemprop="ratingCount" content="{numb_vote}" />
	<meta itemprop="itemReviewed" content="{title}" />

</div>

Здесь «5» – это тип шкалы (в нашем случае – 5-балльная шкала), {numb_rate} – оценка рейтинга, {numb_vote} – количество людей, оценивших материал и {title} – название оцениваемого материала.

Сохраните изменения и отправьте файл на сайт.

3. Далее откройте файл show.full.php в папке /engine/modules/, найдите строку:

$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );

и сразу после нее вставьте:

if($row["vote_num"] == 0) { // Если оценок (количество) 0

	$numb_rate = 0; // Оценка
	$numb_vote = 0; // Количество оценок
	
} else { // Если оценок (количество) больше 0

	$numb_rate = 4.5; // Оценка
	$numb_vote = $row["vote_num"]; // Количество оценок
	
}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);

Сохраните изменения и отправьте файл обратно на сайт.

4. Очистите кэш. Установка закончена.

Микроразметка третьего типа рейтинга («нравится» / «не нравится») полной новости в DLE

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

Поэтому при отрицательном общем балле рейтинга мы будем переводить оценку в 1, при нуле – в 0, а при более нуля – нужный нам рейтинг, например, тот же 4.5.

1. Подключитесь к вашему сайту по FTP.

2. Откройте файл в папке вашей темы, отвечающий за вид полной новости (чаще всего это файл fullstory.tpl), после чего в самый низ вставьте:

<div temprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">
	
	<meta itemprop="bestRating" content="5">
	<meta itemprop="ratingValue" content="{numb_rate}">
	<meta itemprop="ratingCount" content="{numb_vote}">
	<meta itemprop="itemReviewed" content="{title}">

</div>

Здесь «5» – это тип шкалы (в нашем случае – 5-балльная шкала), {numb_rate} – оценка рейтинга, {numb_vote} – количество людей, оценивших материал и {title} – название оцениваемого материала.

Сохраните изменения и отправьте файл на сайт.

3. Далее откройте файл show.full.php в папке /engine/modules/, найдите строку:

$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );

и сразу после нее вставьте:

if($row["vote_num"] == 0) { // Если оценок (количество) 0

	$numb_rate = 0; // Оценка
	$numb_vote = 0; // Количество оценок
	
} else { // Если оценок (количество) больше 0

	if($row["rating"] < 0) { // Если оценка меньше 0
	
		$numb_rate = 1; // Оценка
		
	} elseif($row["rating"] > 0) { // Если оценка больше 0
	
		$numb_rate = 4.5; // Оценка
		
	} else { // Если оценка 0
	
		$numb_rate = 0; // Оценка
		
	}
	
	$numb_vote = $row["vote_num"]; // Количество оценок
	
}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);

Сохраните изменения и отправьте файл обратно на сайт.

4. Очистите кэш. Установка закончена.

Время, после которого в поиске появится рейтинг у вашего сайта, в среднем – пара недель.

Если возникли трудности – пишите об этом в комментариях.

34
комментария
Навигация:
1 2 3
Scorpion,

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

Меняйте на нужные Вам значения.
  • 0
28.02 в 15:58
Артём, хм.. спасибо большое. Не думал что всё настолько просто..
Я поставил так:
$numb_rate = 3;
$numb_vote = 0;
Как я понимаю в поисковике у всех постов с сайта, должна быть оценка 3.
Через пару недель напишу сработало или нет))
  • 0
Scorpion, да. Только 0 лучше замените на 1, например, а то не логично - оценка 3, а количество человек, кто оставил оценку - 0.
  • 1
Статья обновлена.

Изменен принцип разметки (теперь нет ошибок при проверке валидатором) + прокомментированы участки кода, для лучшего понимая и тонкой настройки.
  • 0
17.03 в 23:01
Извините, но какой-то бред.
Почему я получаю в <meta itemprop="ratingValue" content="4.5"> 4.5? если поставлено 20 лайков и 0 дизлайков?
Должно быть 5.0
А еще лучше - 10. Т.е. оценка не 5, а 10
  • -1
Mark, внимательно прочитайте статью, там есть четкий ответ на Ваш вопрос.
  • -1
19.03 в 08:11
Статическое проставление значения в оценку? не самая лучшая реализация, мягко сказать.
Нужен пересчет среднего значения рейтинга в 5 или 10 бальную шлаку.
Вот что нужно http://zerocoolpro.biz/forum/threads/kak-vychislit-srednij-rejting-do-10-ballov.4272/#post-104243
  • 0
Mark, а по мне - очень даже хорошая, учитывая, что этот рейтинг только для сниппета.

Но если Вы все же хотите динамики, то попробует так (вариант для третьего типа):

function wilson_score($up, $down) {

if (!$up) return $down;
$n = $up + $down;
$z = 1.64485;
$phat = $up / $n;

return ($phat + $z * $z / (2 * $n) - $z * sqrt(($phat * (1 - $phat) + $z * $z / (4 * $n)) / $n)) / (1 + $z * $z / $n);

}

if($row["vote_num"] == 0) { // Если оценок (количество) 0

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

} else { // Если оценок (количество) больше 0

$rm = ($row["vote_num"] - $row["rating"]) / 2;
$rp = $row["rating"] + $rm;
$numb_vote = $row["vote_num"]; // Количество оценок
$numb_rate = number_format(wilson_score($rp, $rm) * 10, 1); // Оценка

}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);
  • 1
При этом:

<meta itemprop="bestRating" content="5">

заменяете на:

<meta itemprop="bestRating" content="10">
  • 0
25.04 в 19:36
Приветствую. Не могли бы вы помочь с разметкой данного рейтинга тип 3: http://webrambo.ru/100-reyting-dle-kak-na-youtube-razdelnye-layki-shkala.html
  • 1
Дмитрий, насколько я вижу, в предложенном виде не вносятся правки в файлы движка. Это значит, что вы можете самостоятельно сделать разметку на основании данной статьи или способа из комментариев.
  • 0
27.04 в 02:18
Я сделал по формуле выше:

function wilson_score($up, $down) {

if (!$up) return $down;
$n = $up + $down;
$z = 1.64485;
$phat = $up / $n;

return ($phat + $z * $z / (2 * $n) - $z * sqrt(($phat * (1 - $phat) + $z * $z / (4 * $n)) / $n)) / (1 + $z * $z / $n);

}

if($row["vote_num"] == 0) { // Если оценок (количество) 0

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

} else { // Если оценок (количество) больше 0

$rm = ($row["vote_num"] - $row["rating"]) / 2;
$rp = $row["rating"] + $rm;
$numb_vote = $row["vote_num"]; // Количество оценок
$numb_rate = number_format(wilson_score($rp, $rm) * 10, 1); // Оценка

}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);

Но проблема в том что когда рейтинг минус -1 то в <meta itemprop="ratingValue" content="{numb_rate}"> выводиться оценка 10.0


У меня сейчас стоит http://webrambo.ru/100-reyting-dle-kak-na-youtube-razdelnye-layki-shkala.html второй вариант где зеленые и красные пальцы. Не могли бы вы подсказать как в это запихать процент % <meta itemprop="ratingValue" content="{numb_rate}"> Ну на пример если у новости рейтинг 47% то здесь {numb_rate} должно выводиться оценка 4.7, если к примеру 88% то будет выводиться 8.8 оценка? Возможно такое реализовать?
  • 0
27.04 в 02:28
Или хотя бы можете подсказать, что исправить в этой формуле, чтобы когда рейтинг 0 или минус то выводилось {numb_rate} 0 но не 10.0 ?


function wilson_score($up, $down) {

if (!$up) return $down;
$n = $up + $down;
$z = 1.64485;
$phat = $up / $n;

return ($phat + $z * $z / (2 * $n) - $z * sqrt(($phat * (1 - $phat) + $z * $z / (4 * $n)) / $n)) / (1 + $z * $z / $n);

}

if($row["vote_num"] == 0) { // Если оценок (количество) 0

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

} else { // Если оценок (количество) больше 0

$rm = ($row["vote_num"] - $row["rating"]) / 2;
$rp = $row["rating"] + $rm;
$numb_vote = $row["vote_num"]; // Количество оценок
$numb_rate = number_format(wilson_score($rp, $rm) * 10, 1); // Оценка

}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);
  • 0
Дмитрий, попробуйте так:

function wilson_score($up, $down) {

if (!$up) return $down;
$n = $up + $down;
$z = 1.64485;
$phat = $up / $n;

return ($phat + $z * $z / (2 * $n) - $z * sqrt(($phat * (1 - $phat) + $z * $z / (4 * $n)) / $n)) / (1 + $z * $z / $n);

}

if($row["vote_num"] == 0) { // Если оценок (количество) 0

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

} else { // Если оценок (количество) больше 0

if($row["rating"] <= 0) { // Если рейтинг меньше 1

$numb_rate = 0; // Оценка
$numb_vote = 0; // Количество оценок

} else {

$rm = ($row["vote_num"] - $row["rating"]) / 2;
$rp = $row["rating"] + $rm;
$numb_vote = $row["vote_num"]; // Количество оценок
$numb_rate = number_format(wilson_score($rp, $rm) * 10, 1); // Оценка

}

}

$tpl->set("{numb_rate}", $numb_rate);
$tpl->set("{numb_vote}", $numb_vote);
  • 0
27.04 в 22:59
Благодарю. Вроде работает, тока вот правильно нет, пока не знаю.
  • 0
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.
Подняться наверх