Оценок: 3
MODX CSS StarRating и микроразметка aggregateRating

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 - текущая тема (из конфига)

Оценок: 3

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

  1. Подскажите, вывожу к примеру на главной рейтинг вот так [[!starRating? &scheme=`full` ]]
    Все сделал по пунктам, на другой странице вставляю тоже самое получается голоса одни и те-же, я не тем кодом наверное пользуюсь для вставки ?)

    Beegart 18 февраля 2021, 10:01 0
    • Давно уже его не использую… Видимо не все параметры указаны. Попробуйте дополнительно параметр:

      Показать код
      &starId=`[[*id]]`
      Не нашел документацию к нему… там были и другие параметры, например «name» для вывода нескольких голосований на одной странице… это если ничего не путаю. В любом случае, все параметры можно подсмотреть в параметрах сниппета

      Владимир 21 февраля 2021, 16:42 0
    • Приветствую! Решил по вашему уроку убрать голосование с общих страниц, но оставить отображение текущего рейтинга. Сделал все как было написано, но в итоге имеющийся рейтинг просто пропадает, т.е. на страницах голосования он остается, а на общих исчезает: отображаются пустые звездочки, текст «Голосов:» и больше ничего. Почему так может быть?

      Александр 02 июля 2017, 00:09 0
      • Сложно сказать т.к. давно уже не использую данное расширение. накруток много

        Владимир 02 июля 2017, 01:45 0
        • Ок, поищу еще решение. Если не найду буду ставить другой рейтинг, этот с некоторыми дополнениями не совсем себя корректно ведет

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

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

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

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

              Андрій 28 октября 2016, 13:23 0
          • Как сделать, чтобы средняя оценка была дробная? (например: 4,6)

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

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

                Андрій 28 октября 2016, 11:06 +1
            • Спасибо за решение. Появилась накрутка голосов (где-то около 20 в день) — выяснять причину не было времени. Помогло «Убираем голосование с общих страниц».

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

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

                  Михаил 17 декабря 2015, 09:54 0
              Надежный хостинг VPS серверов
              • Свои ISO образы
              • VDS с оплатой раз и навсегда
              • Аренда VDS на любой срок, с оплатой по дням
              • Большое разнообразие конфигураций
              • Дата-центры в ЕС и России
              + скидка 10%