Была уже
статья, где описывалось создание рейтинга -/+, но такой скрипт мог работать некорректно. Сейчас постараюсь объяснить почему :)
В данной системе рейтинга для минуса (-) мы используем оценку 1 из 5, а для плюса - 3 из 5.
Текущий рейтинг материала высчитывается следующим JS-кодом:
document.write(Math.round(<?($RATING$*$RATED$)?>)-<?2*$RATED$?>) То есть мы текущий рейтинг (1-5) умножаем на количество голосов и вычитаем количество голосов, умноженное на два.
Первой комбинацией мы получаем сумму всех оценок, а уже второй нужное число.
Тут стоит "Math.round". Эта функция округляет значения в скобках.
Собственно, из-за округления и рейтинг может высчитываться неправильно.
Разберём такой случай:
- проголосовало 56 человек;
- из них "+" поставили 34, а "-" - 22;
- текущий рейтинг: 2.2.
34-22=12. То есть в итоге у нас должно получиться число
12.
Пробуем посчитать по формуле:
(2.2*56) = 123.2. Округляем, получаем: 123
(2*56) = 112
123-112 =
11.
11 ≠
12. Вот и получили противоречие :)
В чём же проблема? А проблема именно в том, что до сегодняшнего дня не существовало кода, который выводил бы сумму всех оценок, без высчитывания этого значения путём перемножения рейтинга на количество голосов.
Это число можно было найти в окне "Управление счётчиками" (первое число), но в шаблонах самого материала это число вывести без дополнительных запросов было невозможно.
С сегодняшнего дня такая возможность появилась :)
Была введена новая переменная -
$RATING_SUM$, которая выводит сумму всех оценок. Таким образом, мы во-первых можем точно посчитать текущий рейтинг материала, если используется вид рейтинга -/+, а во-вторых вывести это значение на стороне сервера.
Итак. Чтобы рейтинг высчитывался верно, и это значение выводилось на стороне сервера, в
скрипте заменяем:
<script type="text/javascript">document.write(Math.round(<?($RATING$*$RATED$)?>)-<?2*$RATED$?>)</script> На:
<?($RATING_SUM$)-(2*$RATED$)?>
9Рейтинг, рейтинг -/+
Поставил скрипт в кат. статей. В виде материалов отображается, а на главной странице и странице категории и.т.д нет. :(
Проверял в Доске объявлений и в Каталоге статей.
А модуль какой?
Да, кода пока нет в списке кодов.
Например в твиттере "Введена новая переменная - $RATING_SUM$, которая выводит сумму всех оценок" - почему так не делают? Это так просто и так нужно, но администрация этого не видит.
Да и слишком мелочно это, чтобы писать в Твиттер.
Возможно, в будущем сделают на форуме Сообщества тему, или даже отдельный проект, где будут публиковать все нововведения и изменения в системе...