Здравствуйте! Недавно возникла потребность модифицировать стандартный рейтинг новостей в DataLife Engine (DLE), если точнее, то сделать его похожим на рейтинг IMDb, т.е. десять звездочек, средний балл и количество пользователей, которые проголосовали. Особыми знаниями языка программирования PHP не владею, но написать хак сумел. В будущем, если осилю PHP, планирую сделать модуль, который будет выводить в блоке популярные новости по рейтингу, а возможно и TOP 100 на отдельной странице. Особенно это будет полезно для сайтов киношной тематики, но пока это планы. Верьте в меня. Будем редактировать файл /engine/ajax/rating.php и файл /engine/modules/functions.php, а также добавим стили в /templates/Deafult/css/engine.css.
Откройте файл /engine/ajax/rating.php и найдите строку
if( $go_rate > 5 or $go_rate < 1 ) $go_rate = 0;
замените ее на
if( $go_rate > 10 or $go_rate < 1 ) $go_rate = 0;
Откройте файл /engine/modules/functions.php и найдите
function ShowRating($id, $rating, $vote_num, $allow = true) {
...
}
function ShortRating($id, $rating, $vote_num, $allow = true) {
...
}
замените эти две функции на
function ShowRating($id, $rating, $vote_num, $allow = true) {
global $lang;
if( $rating ) $rating = round( ($rating / $vote_num), 1 );
else $rating = 0;
$rating1 = str_replace( ",", ".", $rating );
$rating2 = $rating1 * 10;
if( ! $allow ) {
$rated = <<<HTML
<div class="rating" style="float:left;">
<ul class="unit-rating">
<li class="current-rating" style="width:{$rating2}%;">{$rating2}</l
i>
</ul>
</div><div class="rating" style="float:left; padding-top:2px; width:auto;"> {$rating1}/10 &n
bsp;({$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:{$rating2}%;">{$rating2}</l
i>
<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><div class="rating" style="float:left; padding-top:2px; width:auto;"> {$rating1}/10 &n
bsp;({$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), 1 );
else $rating = 0;
$rating = str_replace( ",", ".", $rating );
$rating = $rating * 10;
if( ! $allow ) {
$rated = <<<HTML
<div class="rating" style="float:left;">
<ul class="unit-rating">
<li class="current-rating" style="width:{$rating}%;">{$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}%;">{$rating}</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>
HTML;
$rated .= "</div>";
return $rated;
}
Откройте файл /templates/Default/css/engine.css, если используете шаблон Default, если нет, то тот, который используете и найдите стили, которые относятся к рейтингу новостей (они прокомментированы) и замените их на
.rating {
color: #555555;
font-size: 11px; /* ! */
font-family: tahoma; /* ! */
width: 170px;
height: 16px;
}
.unit-rating {
list-style: none;
margin: 0px;
padding: 0px;
width: 170px;
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 a.r6-unit { left: 85px; }
.unit-rating a.r6-unit:hover { width: 102px; }
.unit-rating a.r7-unit { left: 102px; }
.unit-rating a.r7-unit:hover { width: 119px; }
.unit-rating a.r8-unit { left: 119px; }
.unit-rating a.r8-unit:hover { width: 136px; }
.unit-rating a.r9-unit { left: 136px; }
.unit-rating a.r9-unit:hover { width: 153px; }
.unit-rating a.r10-unit { left: 153px; }
.unit-rating a.r10-unit:hover { width: 170px; }
.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;
}
На этом установка хака заканчивается. Если вы сделали все верно, то результаты своих трудов уже можете наблюдать.
На этом с вами прощаюсь и напоминаю, что здоровая критика всегда приветсвуется. Спасибо вам за внимание.