Рейтинг 10 звезд для DLE


Делаем Рейтинг 10 звезд для DLE 10.4, DLE 10.5 и выше - это хак для дле с не сложной установкой подойдет сайтам где нужен рейтинг больше 5, на таких сайтах большое числом пользователей. Хак рейтинг 10 звезд для DLE к примеру можно увидеть на порталах посвященные кино тематике, музыке или играм, где пользователи оценивают новость или продукт.



Установка хака рейтинг 10 звезд для DataLife Engine 10.4 и выше



Открыть: enginemodulesfunctions.php
Найти:

function ShowRating($id, $rating, $vote_num, $allow = true) {
	global $lang, $config;

	if( !$config['rating_type'] ) {
		
		if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 0 );
		else $rating = 0;
		
		if ($rating < 0 ) $rating = 0;

		$rating = $rating * 20;
	
		if( !$allow ) {
		
			$rated = <<<HTML
<div class="rating">
		<ul class="unit-rating">
		<li class="current-rating" style="width:{$rating}%;">{$rating}</li>
		</ul>
</div>
HTML;
		
			return $rated;
		}
	
		$rated = <<<HTML
<div id='ratig-layer-{$id}'><div class="rating">
		<ul class="unit-rating">
		<li class="current-rating" style="width:{$rating}%;">{$rating}</li>
		<li><a href="#" title="{$lang['useless']}" class="r1-unit" onclick="doRate('1', '{$id}'); return false;">1</a></li>
		<li><a href="#" title="{$lang['poor']}" class="r2-unit" onclick="doRate('2', '{$id}'); return false;">2</a></li>
		<li><a href="#" title="{$lang['fair']}" class="r3-unit" onclick="doRate('3', '{$id}'); return false;">3</a></li>
		<li><a href="#" title="{$lang['good']}" class="r4-unit" onclick="doRate('4', '{$id}'); return false;">4</a></li>
		<li><a href="#" title="{$lang['excellent']}" class="r5-unit" onclick="doRate('5', '{$id}'); return false;">5</a></li>
		</ul>
</div></div>
HTML;
	
		return $rated;

	}


Заменить на:

function ShowRating($id, $rating, $vote_num, $allow = true) {
	global $lang, $config;

	if( !$config['rating_type'] ) {
		
		if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 1 );
    else $rating = 0;
    $rating1 = str_replace( ",", " . ", $rating );
    $rating2 = $rating1 * 10;
	
		if( ! $allow ) {
        
        $rated = <<<HTML
<div class="rating">
        <ul class="unit-rating">
        <li class="current-rating" style="width:{$rating2}%;">{$rating2}</li>
        </ul>
<div class="rating_digits"><div class="rating_digits_1">Общий бал: {$rating1}</div><div class="rating_digits_2">Проголосовало людей: {$vote_num}</div></div></div>
HTML;
        
        return $rated;
    }
	
		$rated .= <<<HTML
<div id='ratig-layer-{$id}'><div class="rating">
        <ul class="unit-rating">
        <li class="current-rating" style="width:{$rating2}%;">{$rating2}</li>
        <li><a href="#" title="1" class="r1-unit" onclick="doRate('1', '{$id}'); return false;">1</a></li>
        <li><a href="#" title="2" class="r2-unit" onclick="doRate('2', '{$id}'); return false;">2</a></li>
        <li><a href="#" title="3" class="r3-unit" onclick="doRate('3', '{$id}'); return false;">3</a></li>
        <li><a href="#" title="4" class="r4-unit" onclick="doRate('4', '{$id}'); return false;">4</a></li>
        <li><a href="#" title="5" class="r5-unit" onclick="doRate('5', '{$id}'); return false;">5</a></li>
        <li><a href="#" title="6" class="r6-unit" onclick="doRate('6', '{$id}'); return false;">6</a></li>
        <li><a href="#" title="7" class="r7-unit" onclick="doRate('7', '{$id}'); return false;">7</a></li>
        <li><a href="#" title="8" class="r8-unit" onclick="doRate('8', '{$id}'); return false;">8</a></li>
        <li><a href="#" title="9" class="r9-unit" onclick="doRate('9', '{$id}'); return false;">9</a></li>
        <li><a href="#" title="10" class="r10-unit" onclick="doRate('10', '{$id}'); return false;">10</a></li>
        </ul>
<div class="rating_digits"><div class="rating_digits_1">Общий бал: {$rating1}</div><div class="rating_digits_2">Проголосовало людей: {$vote_num}</div></div></div></div>
HTML;
	
		return $rated;

	}

Окрыть: engineajaxrating.php
Найти:

if( $go_rate > 5 or $go_rate < 1 ) $go_rate = false;


Заменить на:

if( $go_rate > 10 or $go_rate < 1 ) $go_rate = false;


Открыть: templatesваш шаблонstyleengine.css
Заменить весь код между

/*---Рейтинг---*/
...
/*---BB коды---*/


На:

/*---Рейтинг---*/
.rating {
color: black;
display: block;
font-size: 10px;
font-family: tahoma;
height: 54px;
margin: 0;
font-weight: bold;
width: 264px;
}
.unit-rating {
list-style: none;
margin:0 auto;
padding: 0px;
width: 264px;
height: 27px;
position: relative;
background-image: url(../dleimages/ratingv.png);
background-position: 0 -54px;
background-repeat: repeat-x;
}
.unit-rating li {
    text-indent: -90000px;
    padding: 0px;
    margin: 0px;
    float: left;
}
.unit-rating li a {
    display: block;
    width: 26.4px;
    height: 27px;
    text-decoration: none;
    text-indent: -9000px;
    z-index: 17;
    position: absolute;
    padding: 0px;
}
.unit-rating li a:hover {
background-image: url(../dleimages/ratingv.png);
background-position: 0 -27px;
z-index: 2;
left: 0px;
}
.unit-rating a.r1-unit { left: 0px; }
.unit-rating a.r1-unit:hover { width: 26.4px; }
.unit-rating a.r2-unit { left: 26.4px; }
.unit-rating a.r2-unit:hover { width: 52.8px; }
.unit-rating a.r3-unit { left: 52.8px; }
.unit-rating a.r3-unit:hover { width: 79.2px; }
.unit-rating a.r4-unit { left: 79.2px; }    
.unit-rating a.r4-unit:hover { width: 105.6px; }
.unit-rating a.r5-unit { left: 105.6px; }
.unit-rating a.r5-unit:hover { width: 132px; }
.unit-rating a.r6-unit { left: 132px; }
.unit-rating a.r6-unit:hover { width: 158.4px; }
.unit-rating a.r7-unit { left: 158.4px; }
.unit-rating a.r7-unit:hover { width: 184.8px; }
.unit-rating a.r8-unit { left: 184.8px; }
.unit-rating a.r8-unit:hover { width: 211.2px; }
.unit-rating a.r9-unit { left: 211.2px; }
.unit-rating a.r9-unit:hover { width: 237.6px; }
.unit-rating a.r10-unit { left: 237.6px; }
.unit-rating a.r10-unit:hover { width: 264px; }
.unit-rating li.current-rating {
background-image: url(../dleimages/ratingv.png);
background-position: 0 0px;
position: absolute;
height: 27px;
display: block;
text-indent: -9000px;
z-index: 1;
}

.rating_digits{
font-size: 12px;
line-height: 9px;
height: 26px;
width: 334px;
}

.rating_digits div{
display: inline-block;
}

.rating_digits_1{
margin: 0;
padding: 8px 8px 8px 0;
width: 110px;
height: 10px;
}

.rating_digits_2{
margin: 0;
padding: 8px 8px 8px 0;
width: 187px;
height: 10px;
}

/*---BB коды---*/


Закинуть картинку ratingv.png в dleimages

Открыть: shortstory.tpl и fullstory.tpl шаблонов
Найти:

[rating-type-1]<div class="ratebox"><div class="rate">{rating}</div></div>[/rating-type-1]


И удалить!

После:
{full-story} и {short-story}


Вставить:

[rating-type-1]

{rating}
[/rating-type-1]

Готово!

Приятного использования :)

FAQ: Как сделать так, чтобы к примеру при 8.4 показывало 8-мь звёзд и почти половинку закрашенную ?

Открыть: enginemodulesfunctions.php
Найти:

$rating2 = $rating1 * 10;


Заменить на:

$rating2 = str_replace( ",", "", $rating * 10 );


Готово!

Для вывода в короткой и полной новости общего бала!

1. Открыть show.short.php
Найти:

$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 1 ) );


Ниже вставить:

$tpl->set( '{rating-num}', $row['rating'] = round( ($row['rating'] / $row['vote_num']), 1  ));


2. Открыть show.full.php
Найти:

$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_ra
ting'] ) );


Ниже вставить:

$tpl->set( '{rating-num}', $row['rating'] = round( ($row['rating'] / $row['vote_num']), 1  ));


3. Открыть: shortstory.tpl и fullstory.tpl

Где нужно, вставить:

Общий бал: {rating-num}


Готово! После установки хака чистим кеш!

FAQ: Как вывести тег общего бала "{rating-num}" в полную и краткую новость, если нужно отдельно "{rating-num}", в разных местах будет находится!
Если на версии Dle 10.4 не срабатывает {rating-num} в shortstory.tpl.
FAQ: Ответ: Проблема может быть том, что отключена функция выставления рейтинга в кратких новостях, включил - и общий рейтинг отобразился.

Если в show.short.php нужную строчку из инструкции поставить выше

if( $config['short_rating'] AND $user_group[$member_id['user_group']]['allow_rating'] ) {


Будет работать даже если функция выставления рейтинга в кратких новостях отключена!
FAQ: Можно ли реализовать сортировку популярных новостей не по значению rating, а по значению vote_num, и где следует копать?

FAQ Ответ: topnews.php найти

ORDER BY rating


заменить

ORDER BY vote_num


Автор: D0Gmatist
Адаптация под DLE 10.4: SX2 Дополнил установку!

Закачать хаки дле, как хак рейтинг 10 звезд для DLE 10.4 и выше

Ratingv-10-zvezd-dlya-DLE-10.4-i-vyshe.zip [89,25 Kb] (cкачиваний: 355)
00

Комментарии (0)

Оставить комментарий

Кликните на изображение чтобы обновить код, если он неразборчив