После установки 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 - текущая тема (из конфига)
Подскажите, вывожу к примеру на главной рейтинг вот так [[!starRating? &scheme=`full` ]]
Все сделал по пунктам, на другой странице вставляю тоже самое получается голоса одни и те-же, я не тем кодом наверное пользуюсь для вставки ?)
Давно уже его не использую… Видимо не все параметры указаны. Попробуйте дополнительно параметр:
Приветствую! Решил по вашему уроку убрать голосование с общих страниц, но оставить отображение текущего рейтинга. Сделал все как было написано, но в итоге имеющийся рейтинг просто пропадает, т.е. на страницах голосования он остается, а на общих исчезает: отображаются пустые звездочки, текст «Голосов:» и больше ничего. Почему так может быть?
Сложно сказать т.к. давно уже не использую данное расширение. накруток много
Ок, поищу еще решение. Если не найду буду ставить другой рейтинг, этот с некоторыми дополнениями не совсем себя корректно ведет
Подскажите, есть необходимость вывести среднее значение в tv чтобы затем организовать фильтрацию, есть ли готовые решения и как это можно организовать!?
Спасибо за столь детализированную и понятную инструкцию, но еще есть проблема с накруткой голосов.
Накрутка делается с помощью «анонимных окон» в браузерах. Как с этим бороться не подскажете?
И накрутка и лишняя нагрузка на сервер… nofollow спасает далеко не от всех ботов… решение есть — избавится от ссылок, скрипт переписать… я в итоге решил отказаться совсем от этого рейтинга и использую LikeDislike… Для голосования можно только ± использовать, но вывести звездочки + сделать микроразметку это не мешает
Анонимные окна решил в том же файле
'useSession' => true,
'useCookie' => true,
правда это не совсем то что надо, но временно подойдет. Буду искать решения.
Возможно и LikeDislike, но это не совсем то что нужно.
Как сделать, чтобы средняя оценка была дробная? (например: 4,6)
Спасибо большое за статью, с помощью нее настроила рейтинг с микроразметкой ) Вот только тоже интересно, как можно реализовать дробную оценку, типа 4.5
Вместо $ph['val'] = $currentText; нужно добавить number_format, только не currentText.
У меня в услугах так работает
$ph['val'] = number_format($voteStats['average'], 1, '.', '');
Спасибо за решение. Появилась накрутка голосов (где-то около 20 в день) — выяснять причину не было времени. Помогло «Убираем голосование с общих страниц».
Как выяснилось это только снижает количество накрученных голосов, добавление запрета на индексацию ссылок рейтинга так же не спасает. Выход — замена ссылок на другие теги, но здесь и правки и скрипт писать, в результате решил просто перейти на LikeDislike, немного поправил чанки, получилось вроде бы неплохо
И правда, накрутка все равно осталась. Попробую как-то это исправить, если будет результат — отпишу. LikeDislike не во всех ситуациях поможет. Мне нужно стандартный рейтинг с подключенной микроразметкой.