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

  • Автор темы Wmboard
  • 3572
  • Обновлено
  • 05, Mar 2013
  • #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 Как это выглядит - смотрим на картинках





Скрытая информация :: Авторизуйтесь для просмотра »

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
Тем
49554
Комментарии
57426
Опыт
552966

Интересно