Тема - Рейтинг DLE, как на youtube без правок движка (раздельные лайки, шкала)

Рейтинг DLE, как на youtube без правок движка (раздельные лайки, шкала)

Приветствую.

Данным примером хочу показать, как стандартный рейтинг DLE "нравится-не нравится" визуально преобразовать в всякий интересный вид на примере рейтинга Youtube. Самое главное - этот способ не затрагивает файлы движка, полностью совместим с ним, по-сути это и есть стандартный функционал DLE.

Здесь я применю раздельный подсчет лайков, визуальную шкалу соотношений лайков, процентное соотношение лайков. С помощью js мы посчитаем все это, используя rating и vote-num, и применим. Живое голосование будем делать на основе немного измененной стандартной функции DLE. В результате мы получим такой супер рейтинг.

Подробно не буду объяснять, что к чему, просто выложу.

1. в fullstory.tpl в нужное место ставим (замечу, что можно и в shortstory.tpl)

[rating-type-3]
<div class="frate ignore-select" id="frate-{news-id}">
<div class="rate-plus" id="pluss-{news-id}" onclick="doRateLD('plus', '{news-id}');"><img src="{THEME}/images/thumb-up.png" alt="нравится" /><span>0</span></div>
<div class="rate-minus" id="minuss-{news-id}" onclick="doRateLD('minus', '{news-id}');"><img src="{THEME}/images/thumb-down.png" alt="не нравится" /><span>0</span></div>
<div class="rate-data">{rating}{vote-num}</div>
</div>
[/rating-type-3]

2. в ваш css файл в конец

.frate {display:inline-block; white-space:nowrap; height:30px; line-height:20px; position:relative;}
.rate-data {display:none;}
.rate-plus, .rate-minus {display:inline-block; vertical-align:top; cursor:pointer; min-width:40px; color:#a0a0a0;}
.rate-minus {margin-left:20px;}
.frate img {opacity:0.3; margin-right:7px; display:inline-block; vertical-align:top;}
.frate div:hover img {opacity:1;}
.frate div:hover {color:#000;}
.rbar {height:3px; overflow dden; background-color:#cfcfcf; border-radius:1px; position:absolute; left:0; top:100%; width:100%;}
.rfill {width:50%; height:100%; position:absolute; left:0; top:0; background-color:#2692e6; transition:width 1s linear;}


3. в ваш js файл в конец

$(document).ready(function(){

$('.frate').each(function(){
var rate = $(this),
rdata = rate.find('.rate-data'),
rrate = parseInt(rdata.find('.ratingtypeplusminus').text(), 10),
rvote = parseInt(rdata.find('span[id*=vote]').text(), 10);
rate.append('<div class="rbar"><div class="rfill"></div></div>');
if ( rvote >= rrate && rvote > 0 ) {
var m = (rvote - rrate)/2,
p = rvote - m,
perc = Math.round(p/rvote*100);
rate.find('.rate-plus span').html(p);
rate.find('.rate-minus span').html(m);
rate.find('.rfill').css({'width':''+perc+'%'});
};
});

});

function doRateLD( rate, id ) {
ShowLoading('');
$.get(dle_root + "engine/ajax/rating.php", { go_rate: rate, news_id: id, skin: dle_skin, user_hash: dle_login_hash }, function(data){
HideLoading('');
if ( data.success ) {
var rating = data.rating;
rating = rating.replace(/&lt;/g, "<");
rating = rating.replace(/&gt;/g, ">");
rating = rating.replace(/&amp;/g, "&");
$("#ratig- -" + id).html(rating);
$("#vote-num-id-" + id).html(data.votenum);
var rt = parseInt($(rating).text()),
m = (data.votenum - rt)/2,
p = data.votenum - m,
perc = Math.round(p/data.votenum*100),
fRate = $("#frate-" + id);
fRate.find('.rate-plus span').html(p);
fRate.find('.rate-minus span').html(m);
fRate.find('.rfill').css({'width':''+perc+'%'});
} else if (data.error) {DLEalert ( data.errorinfo, dle_info );}
}, "json");
};

Alt bölmə: DLE
Fəsil: Proqramlaşdırma

Файлы темы
Последний раз тему редактировал AGENT - 12 Dekabr 2024, 13:53
Последняя активность в теме: 12 Dekabr 2024, 13:53
Rəylər 0
Hələ şərh yoxdur
Bağışlayın, şərh yazmaq sizin üçün əlçatan deyil
Geri

MobTop.az