22.01.14, 09:37
0 комментарий
  DLE Хаки

Статистика рейтинга новости для dle 10-10.1

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

Приступим к установке:
Выполняем sql запрос из phpmyadmin:

ALTER TABLE `dle_post_extras` ADD  `static_votes` varchar(200) NOT NULL DEFAULT '';


Заменяем содержимое файла engine/ajax/rating.php

от строки Php - Код

$where = "ip ='{$_IP}'";


До строки Php - Код

$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 flooder($ip, $news_time = false) {


Выше добавляем:

/* статистика рейтинга */
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;

}


В стилях вашего шаблона добавляем:

.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]

Напишите своё мнение