Closed Risgit closed 3 years ago
Не очень понял что не получается.
$rating = round($this->model->getTargetAverageRating($vote), 0, PHP_ROUND_HALF_DOWN);
Эта строка округляет?
Не очень понял что не получается.
// флаг, что рейтинг считать как среднее арифметическое $average_rating = true;
// приоритет за $score
if(!$score){
$score = ($direction == 'up' ? 1 : -1);
$average_rating = false;
} else {
// валидация оценки
if(method_exists($controller, 'validate_rating_score') && !$controller->validate_rating_score($score)){
return $this->cms_template->renderJSON(array(
'success' => false,
'message' => LANG_ERROR
));
}
}
Мне НЕ нужно среднеарифметическое. Мне нужна сумма. И приходится править файл \system\controllers\rating\actions\vote.php при каждом обновлении.
У меня пока нет идей, как это сделать универсально, без потенциальной возможности подделки рейтинга. Максимум что могу предложить, так это функция формирования рейтинга, по типу, как валидация оценки. Но так или иначе, потом придётся править её.
У меня пока нет идей, как это сделать универсально
Не определять $average_rating в зависимости от балльности рейтинга, а просто объявлять в \templates\default\controllers\rating\widget.tpl.php $average = true или $average = false. Я сделаю свой шаблон голосовалки и объявлю в нём, что $average = false. И всё!
Там рейтинг пишется в базу. Толку от того, что в шаблоне вы определите переменную? В vote ее всё равно передавать. А этот флаг не должен определяться параметром запроса.
В vote ее всё равно передавать
Ну, да. Я этого и прошу.
А этот флаг не должен определяться параметром запроса.
Почему?
Почему?
Потому что можно будет влиять на логику. Что помешает подменять этот параметр? Например в типе контента новости один рейтинг, в постах другой рейтинг. В новостях рейтинг +1/-1, в постах можно за раз +5 поставить. Подменяем параметр, ставим себе +5.
Как то так
Я сделаю свой шаблон голосовалки и объявлю в нём, что $average = false. И всё!
Не используйте такой подход никогда, за исключением совсем редких случаев, которые не влияют на логику контроллера. Что называется, яйца курицу не учат, шаблоны - для вывода информации.
Используемая версия InstantCMS: 2.13.1
При использовании своего шаблона голосовалки, если рейтинг многобалльный, результирующее значение округляется. То есть, если значение $score отлично от нуля - результат голосования округляется. У меня многобалльный рейтинг, но округления не требуется. Просьба сделать определение $average_rating как-нибудь по-другому. Может в опциях шаблона голосовалки что-то добавить? Вроде is_average ?