• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Aggregaterating для dle - микроразметка для рейтинга новости

DomiTori

Постоялец
Регистрация
15 Июл 2015
Сообщения
92
Реакции
88
Хак для тех кто использует первый тип рейтинга в DLE - звездочки.
Поделюсь с вами своим способом внедрения микроразметки для рейтинга в DLE.

Открываем /engine/modules/show.full.php
ищем
PHP:
if( $row['allow_rate'] ) {
выше вставляем
PHP:
if ( $row['rating'] == 0 ) $row['rating'] = 5.0;
        if ( $row['vote_num'] == 0 ) $row['vote_num'] = 1;
        $tpl->set( '{rating-num}', $row['rating'] );
        $tpl->set( '{vote-count}', $row['vote_num'] );
Что все это значит:
1 строчка задаст новости рейтинг 5.0 в случае если новость свежая и еще не получала оценки. Иначе валидатор разметки будет ругаться
2 строчка задаст число голосовавших 1, это для того чтоб гугл поверил что у новости выставлен рейтинг.
3 и 4 строчки добавят нам два новых тега {rating-num} - оценка и {vote-count} - количество голосов без лишних тегов.

В fullstory.tpl в самый низ пихаем

HTML:
<script type="application/ld+json">
{
  "@context": "http://schema.org/",
  "@type": "Movie",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{rating-num}",
    "bestRating": "5.0",
    "worstRating": "1.0",
    "ratingCount": "{vote-count}"
    }
}
</script>
"@type": "Movie"- меняем на свой тип новости. В итоге когда нибудь ваш сайт будет находиться в поисковике так

review.png
 
Скажи пожалуйста как быстро в выдаче появляется эта разметка? Наверно стоит уже где то 2 месяца и безрезультатно... :(
 
Скажи пожалуйста как быстро в выдаче появляется эта разметка? Наверно стоит уже где то 2 месяца и безрезультатно... :(
Гугл и яндекс долго думают. С пол года стоит разметка, пока голяк, зато бинг по ней статьи со звездочками показывает. Он менее капризный
 
Рейтинг кажется нужно немного доработать. Возьмем значения:

bestRating: 5.0
ratingCount: 17
ratingValue: 52
worstRating: 1.0

Минимальный и максимальный рейтинг 1 и 5. Однако общий рейтинг ratingValue получается 52. Из-за этого Google при проверке данных пишет ошибку: Не удалось нормализовать значение оценки.

Если автору не сложно, подправьте. Я просто в этом не соображаю)
 
попробуй этот код
Код:
$tpl->set( '{rating_num}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
Вообще {rating_num} ничего теперь не выдает: "ratingValue": "{rating-num}"

Парни, кажется я понял, для {rating-num} нужно сделать: общий рейтинг разделить на кол-во проголосовавших и обернуть все это в функцию round для округления. Так? Если да, то сделайте пожалуйста) я просто в php не шарю
 
Последнее редактирование модератором:
Вообще {rating_num} ничего теперь не выдает: "ratingValue": "{rating-num}"
вместо кода из первого сообщения перед
PHP:
if( $row['allow_rate'] ) {
добавь
Код:
$tpl->set( '{rating_num}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
$tpl->set( '{vote-count}', $row['vote_num'] );
у меня всё работает...
 
вместо кода из первого сообщения перед
PHP:
if( $row['allow_rate'] ) {
добавь
Код:
$tpl->set( '{rating_num}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
$tpl->set( '{vote-count}', $row['vote_num'] );
у меня всё работает...
Так и делаю, но ничего не работает. Версия DLE 11 utf-8. Вот еще прикрепляю файл show.full.php. Может посмотрите?
 

Вложения

  • show.full.txt
    70,9 KB · Просмотры: 4
Так и делаю, но ничего не работает. Версия DLE 11 utf-8. Вот еще прикрепляю файл show.full.php. Может посмотрите?
вот рабочий код у меня на сайте
PHP:
        if( $row['allow_rate'] ) {

            $tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );
            $tpl->set( '{vote-num}', "<span id=\"vote-num-id-".$row['id']."\">".$row['vote_num']."</span>" );
            $tpl->set( '{rating_num}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
            $tpl->set( '[rating]', "" );
            $tpl->set( '[/rating]', "" );
            $tpl->set( '{vote-num_count}', $row['vote_num'] );
           
            if( $user_group[$member_id['user_group']]['allow_rating'] ) {
по нему думаю догадаешься что и куда выводить.
вот результат новых переменных рейтинга:
2016-07-09_12-48-09.png

и забыл ещё, что этот {rating_num} для 10-ти бального рейтинга :ah: небольшой математикой можно перекинуть его на 5-ти бальную систему рейтинга новостей :glob:
 
В верхнем коде строчка:
Код:
$tpl->set( '{rating-num}', $row['rating'] );
выводит общую сумму голосов. Вместо нее поставил:
Код:
$tpl->set( '{rating-num}', round( floatval( $row['rating'] ) / $row['vote_num'], 1 ) );
Стало выводить средний бал и гугл перестал ругаться.
 
Назад
Сверху