Хак статистика рейтинга новости

  • Автор темы mtrolik
  • Дата начала
mtrolik
Участник
Сообщения
26
Реакции
1
Данный модификация позволяет вывести пользователю статистику рейтинга данной новости. Выводит процентную шкалу баллов голосовавших.

Установка:
Выполяняем sql запрос через phpmyadmin:
Код:
ALTER TABLE `dle_post_extras` ADD  `static_votes` varchar(200) NOT NULL DEFAULT '';
В файле engine/ajax/rating.php:
со строки
$where = "ip ='{$_IP}'"; до строки
Код:
$buffer = ShowRating( $row['news_id'], $row['rating'], $row['vote_num'], false );
Меняем на
Код:
$rowlog = $db->super_query( "SELECT news_id FROM " . PREFIX . "_logs WHERE news_id ='$news_id' AND {$where}" ); //переименовали $row на $rowlog

/*
Добавляем новую строку в phpmyadmin
ALTER TABLE `dle_post_extras` ADD  `static_votes` varchar(200) NOT NULL DEFAULT '';
*/

//Добавили вывод строки :,static_votes
$row = $db->super_query( "SELECT news_id, rating, vote_num,static_votes FROM " . PREFIX . "_post_extras WHERE news_id ='$news_id'" );
if( !$rowlog['news_id'] AND count( explode( ".", $_IP ) ) == 4 ) {//переименовали $row на $rowlog

//перзаписываем $row['static_votes']
$staticVote = count(unserialize($row['static_votes'])) > 0 ? unserialize($row['static_votes']) : array();
$static_votes= array();
for($i = 1; $i < 6; $i++) {$staticVote[$i] = intval($staticVote[$i]) ? $staticVote[$i] : 0;
$static_votes[$i] = ($i==$go_rate) ? $staticVote[$i]+1 : $staticVote[$i];
}
   
     //$db->query( "UPDATE " . PREFIX . "_post_extras SET rating=rating+'$go_rate', vote_num=vote_num+1 WHERE news_id ='$news_id'" );
    $db->query( "UPDATE " . PREFIX . "_post_extras SET rating=rating+'$go_rate', vote_num=vote_num+1,static_votes='".serialize($static_votes)."' WHERE news_id ='$news_id'" );
    
if ( $db->get_affected_rows() )    {
        if( $is_logged ) $user_name = $member_id['name'];
        else $user_name = "noname";
       
        $db->query( "INSERT INTO " . PREFIX . "_logs (news_id, ip, member) values ('$news_id', '$_IP', '$user_name')" );

        if ( $config['allow_alt_url'] == "yes" AND !$config['seo_type'] ) $cprefix = "full_"; else $cprefix = "full_".$news_id;   
   
        clear_cache( array( 'news_', 'rss', $cprefix ) );

    }
}
Открываем файл engine/inc/massactions.php находим строку:
Код:
$db->query( "UPDATE " . PREFIX . "_post_extras SET vote_num='0' WHERE news_id='{$id}'" );
Меняем на
Код:
$db->query( "UPDATE " . PREFIX . "_post_extras SET vote_num='0',static_votes='' WHERE news_id='{$id}'" );
Открываем engine/modules/show.full.php после строки:
Код:
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );
Вставляем
Код:
// Вывод статистики рейтинга
$tpl->set( '{static-rating}',ShowStaticRating($row['vote_num'],count(unserialize($row['static_votes'])) > 0 ? unserialize($row['static_votes']) : array()));$tpl->set( '[static-rating]', "" );$tpl->set( '[/static-rating]', "" );
После
Код:
$tpl->set( '{rating}', "" );
Вставляем
Код:
$tpl->set( '{static-rating}','');$tpl->set_block( "'\[static-rating\](.*?)\[/static-rating\]'si", "" );
В файл engine/modules/functions.php добавляем новую функцию:

Код:
/* статистика рейтинга */
function ShowStaticRating($vote_num,$static_votes=array()){
global $config;
$rated = '';
$staticrate = array();
if(count($static_votes)>1){
$color= array('1'=>'one','2'=>'two','3'=>'three','4'=>'four','5'=>'five') ;
for($i = 1; $i < 6; $i++) {
$num = $static_votes[$i];
if( ! $num ) $num = 0;
            if( $vote_num != 0 ) $proc = $num / ($vote_num /100);
            else $proc = 0;
            $proc = round( $proc, 2 );
$staticrate[] = '<div class="rating-bar-container '.$color[$i].'"> <span class="bar-label"> <span class="star-tiny star-full"></span>'.$i.' </span> <span class="bar" style="width:'.intval($proc).'%"></span> <span class="bar-number">'.$num.'</span> </div> ';
}
$rated = '<div class="rating-histogram_hide"><div class="title">Статистика</div><div class="rating-histogram"> '.implode("n",array_reverse($staticrate)).'</div></div>';}
return $rated;
}
В style.css вашей темы добавить:
Код:
.rating-histogram_hide{
background: #ffffff;-moz-border-radius: 5px;-webkit-border-radius: 5px;border-radius: 5px;-webkit-box-shadow: 0px 2px 10px 0px rgba(63,69,75,0.5);-moz-box-shadow: 0px 2px 10px 0px rgba(63,69,75,0.5);box-shadow: 0px 2px 10px 0px rgba(63,69,75,0.5);color: #4c5157;cursor: default;display: none;font-size: 11px;right:35px;line-height: 14px;padding: 11px 17px 12px 13px;position: absolute;min-width: 230px;z-index: 1;border-collapse: separate;text-align:left;}
.rating-histogram_hide .title {font-weight: bold;}
.rating-histogram{width:170px;float:right}
.rating-histogram{padding:20px 20px 20px 30px}
.rating-bar-container{color:#737373;height:23px;font-weight:400;position:relative;width:100%}
.bar-label{font-size:11px;left:-30px;letter-spacing:1px;position:absolute;top:4px}
.bar-number{color:#333;font-size:11px;left:5px;position:absolute;top:4px}
.rating-bar-container .bar{-moz-opacity:0.8;opacity:0.8;filter:alpha(opacity=80);-webkit-transition:width .25s ease;-moz-transition:width .25s ease;
-o-transition:width .25s ease;transition:width .25s ease;display:inline-block;height:100%}
.rating-bar-container.five .bar{background:#88b131}
.rating-bar-container.four .bar{background:#99cc00}
.rating-bar-container.three .bar{background:#ffcf02}
.rating-bar-container.two .bar{background:#ff9f02}
.rating-bar-container.one .bar{background:#ff6f31}
.star-tiny{display:inline-block}
.star-tiny{height:16px;position:relative;top:-1px;width:16px;vertical-align:middle}
.star-full{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAdElEQVQoz2P4//8/AzmYgWKN6KC4uDgBhGF8UjQ+AGGSNEJt+w/FCXg1AhUUAHEDEB8A4g9IGj9AxUByBdg0LkBSjAsvwOpUApoX4PUjUMEFLJouEAwcSjTCFB+AYjAfr0agAgNo/AUgGRQAFTOgbpIjFQMAtcfKBD81ItYAAAAASUVORK5CYII=)
}
В шаблон fullstory.tpl вашей темы вставить:

[static-rating]<div><a href="#" onclick="$('.rating-histogram_hide').toggle('blind',{},100); return false;">статистика рейтинга</a>{static-rating}</div>[/static-rating]
 
Сверху