Данным примером хочу показать, как стандартный рейтинг DLE "нравится-не нравится" визуально преобразовать в всякий интересный вид на примере рейтинга Youtube. Самое главное - этот способ не затрагивает файлы движка, полностью совместим с ним, по-сути это и есть стандартный функционал DLE.
Здесь я применю раздельный подсчет лайков, визуальную шкалу соотношений лайков, процентное соотношение лайков. С помощью js мы посчитаем все это, используя rating и vote-num, и применим. Живое голосование будем делать на основе немного измененной стандартной функции DLE. В результате мы получим такой супер рейтинг.
В 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]
В ваш 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:hidden; 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;}
В ваш 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(/</g, "<");
rating = rating.replace(/>/g, ">");
rating = rating.replace(/&/g, "&");
$("#ratig-layer-" + 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");
};
Закачиваем картинки лайков в папку images шаблона.
Есть нюанс: работает, если был всегда нравится-не нравится или с нуля. Если ранее были звезды или просто один лайк и там наставили оценок, то работать не будет (цифры будут нули), надо обнулять все.
В архиве вы найдете все написанное выше, раскиданное по папкам и файлам.
Ссылка на скачивание: http://rgho.st/7bGTKgrsr
✅
💡 Поздравляю, Ваш пост попал в рейтинг: Рейтинг постов от djimirji. Период 12.2.2019-14.2.2019.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
gryph0n, ovchinnikov, propoker, varja, amalinavia, fxmonster, izbushka, vsebudethorosho, sergiy, sterh, mishka, ohlamoon, jpigeon84, onur1s, html, tasha, radmilochka, azarovskiy, gromozeka, ianboil, drim, prezza, yurgent71, sinilga, valen-tina, golosgalka, tinochka, andrey1986, la-bella-vita, manavendra, verdon, kvg, victorskaz, maksh, andreyprosto, zelivsky, vako, bombo, dikaniovs, olgataul, delectat, sansey, worthless-man, mjataura, mixtrum, archual, kilobucks, ladykosha, wmforum, fatima, oceanotechnic, elcpa, zlody, niiu, alena4e, krevetkoshou, bunakov, process, roman-nikitin, automedia, vladsm, burger-knig, djimirji, nerengot, alexxela, boliwar, edsaw, upper, evgeniybb, kanalex, cryptobitcoinpro, ezavarov
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
@maximus00, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:
Понравилось!
@djimirji up!
@vik 100%
💡 @maximus00 получил апвоут на 12% (VotingPower 8824.29).
Апайте посты блога: https://golos.id/@djimirji и будете получать апвоуты на 70%
Пост может попасть в двухдневный рейтинг и получить награду в случае АПА поста
Пост может попасть в еженедельный рейтинги получить награду в случае АПА поста
Условия вызова бота: