CSS StarRating и микроразметка

После установки CSS StarRating, мне понадобилось добавить так же к рейтингу микроразметку для лучшего отображения в выдаче google. Ни в шаблоне, ни в сниппете вывода текущей оценки не обнаружил. Далее было 2 варианта - или ковырять сниппет, или пройтись по файлам компонента в поисках нужного кода со списком (<ul class=")

Первое что нужно сделать - небольшую правку файла /core/components/star_rating/model/star_rating/starrating.class.php

Здесь в функции renderVote и находим нужный код. Далее варианта 2 - или добавлять микроразметку непосредственно в то что есть, или второй вариант - добавить вывод средней оценки в шаблон, что позволит управлять выводом микроразметки, к примеру создав разные шаблоны.

Средняя оценка здесь уже подсчитана и выводится через переменную $currentText - строка 54, осталось только вывести ее в шаблон. Для этого находим в строке 72 код:

$ph['rating'] = $listItems;

И ниже добавляем:

$ph['val'] = $currentText;

На этом правка файла завершена и осталось только добавить микроразметку в чанк starTpl:

[[+rating]]<span class="totalvotes">Голосов: [[+vote_count]]</span>
[[+rating]]
<span class="totalvotes" itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating"><meta itemprop="bestRating" content="5">
<meta itemprop="ratingCount" content="[[+vote_count]]">
<meta itemprop="ratingValue" content="[[+val]]">Голосов: [[+vote_count]]</span>

Лучшую оценку здесь лучше ввести вручную, равной той что в параметрах сниппета starRating

Убираем голосование с общих страниц

Через пару дней после установки StarRating столкнулся с проблемой накрутки голосов, причем достаточно странной. В логах ничего подозрительного не обнаружил, старые материалы не зацепило, досталось только новым, на главной.

Что бы избавиться от этой проблемы решил убрать возможность голосования с общих страниц, оставив только отображение текущего рейтинга. Кроме уменьшения вероятности накрутки, что здесь не основной плюс, это позволит еще и сократить код. При этом голосование за материал на странице где от него есть только вводная часть - не имеет смысла, так что не вижу минусов.

Правки, которые предстоит сделать - мало чем отличаются от предыдущих и коснутся того же файла - /core/components/star_rating/model/star_rating/starrating.class.php

Здесь находим следующую строку: (примерно 54-я)

$listItems .= '<li class="current-rating" style="width:'. $voteStats['percentage']. '%;">'.$currentText.'</li>';

Ниже добавляем:

$listItemsCur .= '<li class="current-rating" style="width:'. $voteStats['percentage']. '%;">'.$currentText.'</li>';

Далее находим строку: (предположительно 73)

$ph['rating'] = $listItems;

Ниже добавляем:

$ph['cur'] = $listItemsCur;

Затем идем в админку и создаем чанк "starTplCur" со следующим содержимым:

<ul class="star-rating-default" style="width:125px">[[+cur]]</ul>
<span class="totalvotes">Голосов: [[+vote_count]]</span>

Здесь, в классе star-rating-default, default - текущая тема (из конфига)

Добавить комментарий

Комментарии (10)

  1. Кирилл 20 марта 2017, 10:49
    0 #

    Подскажите, есть необходимость вывести среднее значение в tv чтобы затем организовать фильтрацию, есть ли готовые решения и как это можно организовать!?

    1. Андрій 28 октября 2016, 11:21
      0 #

      Спасибо за столь детализированную и понятную инструкцию, но еще есть проблема с накруткой голосов.
      Накрутка делается с помощью «анонимных окон» в браузерах. Как с этим бороться не подскажете?

      1. Владимир 28 октября 2016, 11:28(Комментарий был изменён)
        0 #

        И накрутка и лишняя нагрузка на сервер… nofollow спасает далеко не от всех ботов… решение есть — избавится от ссылок, скрипт переписать… я в итоге решил отказаться совсем от этого рейтинга и использую LikeDislike… Для голосования можно только ± использовать, но вывести звездочки + сделать микроразметку это не мешает

        1. Андрій 28 октября 2016, 13:23(Комментарий был изменён)
          0 #

          Анонимные окна решил в том же файле
          'useSession' => true,
          'useCookie' => true,
          правда это не совсем то что надо, но временно подойдет. Буду искать решения.
          Возможно и LikeDislike, но это не совсем то что нужно.

      2. Виталий 31 марта 2016, 23:51
        0 #

        Как сделать, чтобы средняя оценка была дробная? (например: 4,6)

        1. Светлана 21 октября 2016, 20:05(Комментарий был изменён)
          0 #

          Спасибо большое за статью, с помощью нее настроила рейтинг с микроразметкой ) Вот только тоже интересно, как можно реализовать дробную оценку, типа 4.5

          1. Андрій 28 октября 2016, 11:06(Комментарий был изменён)
            0 #

            Вместо $ph['val'] = $currentText; нужно добавить number_format, только не currentText.
            У меня в услугах так работает
            $ph['val'] = number_format($voteStats['average'], 1, '.', '');

        2. Михаил 16 декабря 2015, 13:53
          0 #

          Спасибо за решение. Появилась накрутка голосов (где-то около 20 в день) — выяснять причину не было времени. Помогло «Убираем голосование с общих страниц».

          1. Владимир 16 декабря 2015, 14:43
            0 #

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

            1. Михаил 17 декабря 2015, 09:54
              0 #

              И правда, накрутка все равно осталась. Попробую как-то это исправить, если будет результат — отпишу. LikeDislike не во всех ситуациях поможет. Мне нужно стандартный рейтинг с подключенной микроразметкой.