Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Рейтинг материала (https://javascript.ru/forum/dom-window/35929-rejjting-materiala.html)

also 26.02.2013 23:51

Рейтинг материала
 
Имеется следующий скрипт:
rateForm=function(c,d,f,g)
{if(typeof d=='undefined'||typeof c=='undefined'||(c!=1&&c!=-1))return false;c+=2;if(!f)f=location.pathname.match(/[^\\\/]+/i)+'';if(!f)return false;var h=$('#rate_'+d);g=$.extend({'before':function(a){a.prev('a').remove();a.next('a').remove()},'after-success':function(a,b){a.html(b).addClass(b>0?'positiveRate':(b==0?'nullRate':'negativeRate'));_uWnd.alert('Оценка засчитана!<br>lol-lol.ru')},'after-error':function(a){try{eval(a)}catch(e){}}},g||{});g.before(h);$.post('/'+f+'/',{'a':'65','id':d,'mark':c,'mod':f,'ajax':'2'},function(a){a=$('cmd:first',a).text();var b=a.match(/рейтинг:\s*([\d.]+)\/(\d+)/i);if(!b)return g['after-error'](a);b=Math.round(b[1]*b[2])-2*b[2];g['after-success'](h,b)})}


Сразу извиняюсь за этот "ужас", такой код мне был предоставлен, сам я в JS полный ноль, поэтому и пишу здесь.

Данный скрипт является решением для юкоз сайтов. Он делает из обычной пяти-звёздочной системы оценивания "Рейтинг + -". Он манипулирует данными "Сумма баллов", "Количество проголосовавших", "Результат" и выводит свой собственный рейтинг. Проблема в следующем:
1) Для того, чтобы можно было выводить топ материалов исходя из этого рейтинга, "Результат" должен быть равен 3. Так собственно и происходит, пока кто-то не поставит "минус" - отрицательную оценку. То есть:
- 1 пользователь ставит +: Сумма - 3; Кол-во проголосовавших - 1; Результат: 3.0
- 2 пользователь ставит +: Сумма - 6; Кол-во проголосовавших - 2; Результат: 3.0
- 3 пользователь ставит -: Сумма - 7; Кол-во проголосовавших - 3; Результат: 2.3

Вопрос: Можно ли изменить алгоритм подсчёта так, что-бы результат всегда был равен 3, даже после отрицательной оценки. Если возможно, буду премного благодарен за решение данной проблемы.

Paradoxxx 02.03.2013 05:16

я не спец но в коде 1+2=+3 за 1 оценку плюс, значит в (c!=1&&c!=-1) должно быть (c!=1&&c!=-2)=0 при оценки минус,что потом разделится на кол-во голосов.. как-то так вроде..

Сергей-Сергей 03.03.2013 16:45

Присоединяюсь к просьбе. Очень нужная весчь!!!
Так тоже есть сайты на юкозе. Давно ищу такую примочку, но безрезультатно.

bormotovk 03.03.2013 17:33

Если я тебя правильно понял, то как то так.
Т.е. условие, что b != 100500 выполняется всегда => рейтинг всегда положительный ('positiveRate').

//Вот это
 a.html(b).addClass(b > 0 ? 'positiveRate' : (b == 0 ? 'nullRate' : 'negativeRate')); 
//Заменить на это
a.html(b).addClass(b != 100500 ? 'positiveRate' : (b == 0 ? 'nullRate' : 'negativeRate'));


Часовой пояс GMT +3, время: 01:23.