VAOZ Опубликовано 13 апреля, 2018 Поделиться Опубликовано 13 апреля, 2018 Данным примером хочу показать, как стандартный рейтинг DLE "нравится-не нравится" визуально преобразовать в всякий интересный вид на примере рейтинга Youtube. Самое главное - этот способ не затрагивает файлы движка, полностью совместим с ним, по-сути это и есть стандартный функционал 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: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;} .rfill {border-radius:3px;} 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(/</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"); }; 4. закачиваем картинки лайков в папку images шаблона Есть нюанс: работает, если был всегда нравится-не нравится или с нуля. Если ранее были звезды или просто один лайк и там наставили оценок, то работать не будет (цифры будут нули), надо обнулять все. В архиве вы найдете все написанное выше, раскиданное по папкам и файлам. youtube-rating.rar Ссылка на комментарий Поделиться на других сайтах Дополнительные параметры обмена...
Рекомендованные сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти