Хак рейтинга DLE Сolor rating

W

Wmboard

#1
Хак рейтинга DLE Сolor rating

Еще одна интересная замена стандартному рейтингу DLE. Хак позволяет пользователям голосовать плюс один голос, минус один голос.
Установка в принципе не сложная, просто нужно быть внимательным в заменах кода файлов движка.

Установка:

Заливаем картинки в папку dleimages вашего шаблона.

В файле engine.css ищем следующее:

Код:
.rating {	color: #555555;	font-size: 11px;		font-family: tahoma;		width: 85px;	height: 16px;
}
.unit-rating {	list-style: none;	margin: 0px;	padding: 0px;	width: 85px;	height: 16px;	position: relative;	background-image: url(../dleimages/rating.gif);	background-position: top left;	background-repeat: repeat-x;
}
.unit-rating li {	text-indent: -90000px;	padding: 0px;	margin: 0px;	float: left;
}
.unit-rating li a {	display: block;	width: 17px;	height: 16px;	text-decoration: none;	text-indent: -9000px;	z-index: 17;	position: absolute;	padding: 0px;
}
.unit-rating li a:hover {	background-image: url(../dleimages/rating.gif);	background-position: left center;	z-index: 2;	left: 0px;
}
.unit-rating a.r1-unit { left: 0px; }
.unit-rating a.r1-unit:hover { width: 17px; }
.unit-rating a.r2-unit { left: 17px; }
.unit-rating a.r2-unit:hover { width: 34px; }
.unit-rating a.r3-unit { left: 34px; }
.unit-rating a.r3-unit:hover { width: 51px; }
.unit-rating a.r4-unit { left: 51px; }
.unit-rating a.r4-unit:hover { width: 68px; }
.unit-rating a.r5-unit { left: 68px; }
.unit-rating a.r5-unit:hover { width: 85px; }
.unit-rating li.current-rating {	background-image: url(../dleimages/rating.gif);	background-position: left bottom;	position: absolute;	height: 16px;	display: block;	text-indent: -9000px;	z-index: 1;
}

Все это нужно заменить на:

Код:
.rating-text {float: left;}
#ratig-layer { font-weight: bold; float: left; padding-right: 5px;
}
#ratig-layer a, #ratig-layer a:hover {text-decoration: none;}
.r2-unit{ cursor: pointer;
}

Идем по пути engine/ajax/rating.php и в файле rating.php находим:

Код:
if( $go_rate > 5 or $go_rate < 1 ) $go_rate = 0;

Меняем это на:

Код:
if( $go_rate > 5 or $go_rate < -1 ) $go_rate = 0;

Идем в engine/modules/functions.php и находим следующий код:

Код:
function ShowRating($id, $rating, $vote_num, $allow = true) {	global $lang;	if( $rating ) $rating = round( ($rating / $vote_num), 0 );	else $rating = 0;	$rating = $rating * 17;	if( ! $allow ) {	$rated = <<<HTML
<div class="rating" style="float:left;">	<ul class="unit-rating">	<li class="current-rating" style="width:{$rating}px;">{$rating}</li>	</ul>
</div><div class="rating" style="float:left; padding-top:2px;"> ({$lang['voten']} {$vote_num})</div>
HTML;	return $rated;	}	$rated .= <<<HTML
<div id='ratig-layer'><div class="rating" style="float:left;">	<ul class="unit-rating">	<li class="current-rating" style="width:{$rating}px;">{$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 class="rating" style="float:left; padding-top:2px;"> ({$lang['voten']} {$vote_num})</div></div>
HTML;	return $rated;
}
function ShortRating($id, $rating, $vote_num, $allow = true) {	global $lang;	if( $rating ) $rating = round( ($rating / $vote_num), 0 );	else $rating = 0;	$rating = $rating * 17;	if( ! $allow ) {	$rated = <<<HTML
<div class="rating" style="float:left;">	<ul class="unit-rating">	<li class="current-rating" style="width:{$rating}px;">{$rating}</li>	</ul>
</div>
HTML;	return $rated;	}	$rated = "<div id='ratig-layer-" . $id . "'>";	$rated .= <<<HTML
<div class="rating" style="float:left;">	<ul class="unit-rating">	<li class="current-rating" style="width:{$rating}px;">{$rating}</li>	<li><a href="#" title="{$lang['useless']}" class="r1-unit" onclick="dleRate('1', '{$id}'); return false;">1</a></li>	<li><a href="#" title="{$lang['poor']}" class="r2-unit" onclick="dleRate('2', '{$id}'); return false;">2</a></li>	<li><a href="#" title="{$lang['fair']}" class="r3-unit" onclick="dleRate('3', '{$id}'); return false;">3</a></li>	<li><a href="#" title="{$lang['good']}" class="r4-unit" onclick="dleRate('4', '{$id}'); return false;">4</a></li>	<li><a href="#" title="{$lang['excellent']}" class="r5-unit" onclick="dleRate('5', '{$id}'); return false;">5</a></li>	</ul>
</div>
HTML;	$rated .= "</div>";	return $rated;
}
function userrating($name) {	global $db;	$row = $db->super_query( "SELECT SUM(rating) as rating, SUM(vote_num) as num FROM " . PREFIX . "_post where autor ='$name'" );	if( $row['num'] ) $rating = round( ($row['rating'] / $row['num']), 0 );	else $rating = 0;	$rating = $rating * 17;	$rated = <<<HTML
<div class="rating" style="display:inline;">	<ul class="unit-rating">	<li class="current-rating" style="width:{$rating}px;">{$rating}</li>	</ul>	</div>
HTML;	return $rated;
}

Все это нужно заменить на:

Код:
function ShowRating($id, $rating, $vote_num, $allow = true) { global $is_logged, $member_id, $config, $lang, $db; if ($rating) $rating = round($rating, 0); else $rating = 0;
switch($rating) {
case ($rating >= 0):
$rating = '<span style="color: #009900;">+'.$rating.'</span>';
break;
case ($rating <= 0):
$rating = '<span style="color: #FF0000;">'.$rating.'</span>';
break;
case($rating == 0):
$rating = '<span style="color: #000000;">'.$rating.'</span>';
break;
} if (!$allow) { $rated = <<<HTML
<div id="ratig-layer"> <a href="#" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="doRate('1', '{$id}'); return false;"> <img src="/templates/elegant/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" width="16" height="16" align="middle" /> </a> {$rating} <a href="#" title="Не нравится(-)" alt="Не нравится(-)" class="r2-unit" onclick="doRate('-1', '{$id}'); return false;"> <img src="/templates/elegant/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" width="16" height="16" align="middle" /> </a>
</div>
HTML; return $rated;
}
$rated .= <<<HTML
<span id="ratig-layer-{$id}"> <div id="ratig-layer"> <a href="#" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="doRate('1', '{$id}'); return false;"> <img src="{THEME}/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" width="16" height="16" align="middle" /> </a> {$rating}
<a href="#" title="Не нравится(-)" alt="Не нравится(-)" class="r2-unit" onclick="doRate('-1', '{$id}'); return false;"> <img src="{THEME}/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" width="16" height="16" align="middle" />
</a>
</div>
</span>
HTML; return $rated;
}
function ShortRating($id, $rating, $vote_num, $allow = true) { global $config, $lang; if ($rating) $rating = round($rating, 0); else $rating = 0;
switch($rating) {
case ($rating >= 0):
$rating = '<span style=\"color: #009900;\">+'.$rating.'</span>';
break;
case ($rating <= 0):
$rating = '<span style="color: #FF0000;">'.$rating.'</span>';
break;
case($rating == 0):
$rating = '<span style="color: #000000;">'.$rating.'</span>';
break;
} if (!$allow) { $rated = <<<HTML
<div id="ratig-layer"> <a href="#" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="doRate('1', '{$id}'); return false;"> <img src="/templates/elegant/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" width="16" height="16" align="middle" /> </a> {$rating} <a href="#" title="Не нравится(-)" alt="Не нравится(-)" class="r2-unit" onclick="doRate('-1', '{$id}'); return false;"> <img src="/templates/elegant/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" width="16" height="16" align="middle" /> </a>
</div>
HTML; return $rated;
}
$rated = "<span id=\"ratig-layer-" . $id . "\">";
$rated .= <<<HTML <div id="ratig-layer">
<a href="#" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="dleRate('1', '{$id}'); return false;"> <img src="{THEME}/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" width="16" height="16" align="middle" />
</a>
{$rating}
<a href="#" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="dleRate('-1', '{$id}'); return false;"> <img src="{THEME}/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" width="16" height="16" align="middle" />
</a> </div>
HTML; $rated .= "</span>"; return $rated;
}
function userrating($name) { global $db; $row = $db->super_query("SELECT SUM(rating) as rating, SUM(vote_num) as num FROM " . PREFIX . "_post where autor ='$name'"); if ($row['num']) $rating = round(($row['rating'] / $row['num']), 0); else $rating = 0; $rating = $rating; $rated = <<<HTML
{$rating}
HTML; return $rated;
}

Где в вышеприведенном коде меняем пути к картинкам на свои.

После очистки кэша мы увидим статьи с нулевым рейтингом. Ничего страшного, это нормально.

Если новый рейтинг не отображается не забудьте проверить в вашем шаблоне shortstory.tpl и fullstory.tpl на наличие тэга {rating}

Данный хак тестировался на DLE 9.5
Как это выглядит - смотрим на картинках
 
Get involved!

Here you can only see a limited number of comments. On СЕО Форум Вебмастеров you see all comments and all functions are available to you. To the thread