• Автор:

    Braund
  • Добавлено:

    янв 22, 2014
  • Комментариев:

    0
  • Просмотров:

    1317

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

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

Данный модификация позволяет вывести пользователю статистику рейтинга данной новости.
Выводит процентную шкалу баллов голосовавших.

Установка:

Выполяняем 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]


Автор: rocksmart
Вернуться
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.