chrome|90.0.4430.93|blMain
uCoz блог, инструкции uCoz

БЛОГ

uCoz, скрипты, всякое  Поиск, Search

ПОЛНОЦЕННЫЙ РЕЙТИНГ -/+

  
Рейтинг, рейтинг -/+ Рейтинг, рейтинг -/+     01.09.2011, 22:00    
Была уже статья, где описывалось создание рейтинга -/+, но такой скрипт мог работать некорректно. Сейчас постараюсь объяснить почему :)

В данной системе рейтинга для минуса (-) мы используем оценку 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.
1112. Вот и получили противоречие :)

В чём же проблема?
А проблема именно в том, что до сегодняшнего дня не существовало кода, который выводил бы сумму всех оценок, без высчитывания этого значения путём перемножения рейтинга на количество голосов.

Это число можно было найти в окне "Управление счётчиками" (первое число), но в шаблонах самого материала это число вывести без дополнительных запросов было невозможно.

С сегодняшнего дня такая возможность появилась :)

Была введена новая переменная - $RATING_SUM$, которая выводит сумму всех оценок. Таким образом, мы во-первых можем точно посчитать текущий рейтинг материала, если используется вид рейтинга -/+, а во-вторых вывести это значение на стороне сервера.

Итак. Чтобы рейтинг высчитывался верно, и это значение выводилось на стороне сервера, в скрипте заменяем:

<script type="text/javascript">document.write(Math.round(<?($RATING$*$RATED$)?>)-<?2*$RATED$?>)</script>

На:

<?($RATING_SUM$)-(2*$RATED$)?>
7 EGKO пишет:
Извиняюсь, все правильно.

6 EGKO пишет:
Здравствуйте!
Поставил скрипт в кат. статей. В виде материалов отображается, а на главной странице и странице категории и.т.д нет. :(

5 Александр пишет:
Например в фотоальбоме на странице полной фотографии,
Ответ:
В фотоальбоме, возможно, не сделали.
Проверял в Доске объявлений и в Каталоге статей.

4 Александр пишет:
а код $RATING_SUM$ если просто вставить то ничего не выводит, так и должно быть? И описания этого кода нету в списке кодов в ПУ
Ответ:
Нет, должна выводится сумма всех оценок.
А модуль какой?
Да, кода пока нет в списке кодов.

3 NeoGame12 пишет:
Я так долго искал какой формулой найти кол-во минусов и плюсов, спасибо, полезная статья!

2 MaxL пишет:
Ну такая тема есть, но в нее никто ничего не пишет. Раньше писали.

1 MaxL пишет:
Системе не хватает источника вот таких мелких изменений.
Например в твиттере "Введена новая переменная - $RATING_SUM$, которая выводит сумму всех оценок" - почему так не делают? Это так просто и так нужно, но администрация этого не видит.
Ответ:
Эту переменную добавил один разработчик по моей просьбе, поэтому и не написали...

Да и слишком мелочно это, чтобы писать в Твиттер.
Возможно, в будущем сделают на форуме Сообщества тему, или даже отдельный проект, где будут публиковать все нововведения и изменения в системе...