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

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Хак рейтинга 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
Как это выглядит - смотрим на картинках
 

Вложения

  • -1.jpg
    -1.jpg
    14.4 KB · Просмотры: 7
  • +1.jpg
    +1.jpg
    14.7 KB · Просмотры: 6
  • dleimages.zip
    456 байт · Просмотры: 2

Статистика форума

Темы
200.635
Сообщения
380.523
Пользователи
327.873
Новый пользователь
lightnight
Сверху Снизу