- 05, Mar 2013
- #1
Хак рейтинга DLE Сolor rating
Еще одна интересная замена стандартному рейтингу DLE. Хак позволяет пользователям голосовать плюс один голос, минус один голос.
Установка в принципе не сложная, просто нужно быть внимательным в заменах кода файлов движка.
Установка: Заливаем картинки в папку dleimages вашего шаблона. В файле engine.css ищем следующее:
Где в вышеприведенном коде меняем пути к картинкам на свои. После очистки кэша мы увидим статьи с нулевым рейтингом. Ничего страшного, это нормально. Если новый рейтинг не отображается не забудьте проверить в вашем шаблоне shortstory.tpl и fullstory.tpl на наличие тэга {rating}
Данный хак тестировался на DLE 9.5 Как это выглядит - смотрим на картинках
Скрытая информация :: Авторизуйтесь для просмотра »
Установка: Заливаем картинки в папку 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 Как это выглядит - смотрим на картинках
Скрытая информация :: Авторизуйтесь для просмотра »