Рейтинг как на YouTube : вариант 1

Рейтинг как на YouTube : вариант 1

Хак поможет визуально преобразовать стандартный рейтинг №3 нравится/не нравится в интересный вид на примере рейтинга YouTube. Здесь используется раздельный подсчет лайков с визуальной шкалой соотношений. Этот способ не затрагивает файлы движка и полностью совместим с ним.


Установка:
1. Открыть shortstory.tpl или fullstory.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;}

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-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/ шаблона.

Готово!

Важно: хак правильно работает, если в настройках движка изначально был установлен рейтинг нравится/не нравится или за новость еще никто не голосовал. Если ранее использовались рейтинги звезды или один лайк и там проставлены оценки, то хак работать не будет. Следует обнулить результаты рейтинга новостей.

reyting-kak-na-youtube.zip
Создайте аккаунт или авторизуйтесь для скачивания
 
Версия DLE: 10.5-12.0
Автор: WebRambo
Источник
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.