Исправление рейтинга Bitrix

В компоненте iblock.vote есть один очень неприятный и непонятный момент — если рейтинг записи/товара еще не выставлялся, то расчет средней оценки считается неверно. Как пример, если выставить 5, то среднюю оценку посчитает как 3.3.

Исправить это довольно просто. Инструкция для 16 версии и с шаблоном компонента Stars.

1) В шаблоне /bitrix/templates/*/comonents/bitrix/iblock.vote/*/template.php ищем

CJSCore::Init(array("ajax"));

перед этой строкой вставляем

$vote_width = 0; //0%

if ($votesCount > 0 && $votesValue > 0)
$vote_width = ($votesValue+1)*20;
 
if ($votesCount == 1)
$vote_width = $votesValue*20;

2) В этом же шаблоне чуть ниже ищем строку отвечающую за количество звезд

<div id="<?=$arJSParams["progressId"]?>" class="bx_stars_progres" style="width:<?=($votesCount > 0 && $votesValue > 0) ? ($votesValue+1)*20 : 0?>%;">

Заменяем на

<div id="<?=$arJSParams["progressId"]?>" class="bx_stars_progres" style="width:<?=$vote_width?>%;"></div>

3) В файле /bitrix/components/bitrix/iblock.vote/component.php ищем

$arProperties["rating"]["VALUE"] = round(($arProperties["vote_sum"]["VALUE"]+31.25/5*$arParams["MAX_VOTE"])/($arProperties["vote_count"]["VALUE"]+10),2);

После добавляем

                if ($arProperties["vote_count"]["VALUE"] === 1)
                $arProperties["rating"]["VALUE"] = $RATING;

4) Наслаждаемся

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *