• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Модуль замена стандартному рейтингу

Статус
В этой теме нельзя размещать новые ответы.

cool1991

Писатель
Регистрация
9 Авг 2010
Сообщения
7
Реакции
1
сабж
модуль был скачен отсюда:

но рейтинг в шаблоне userinfo.tpl выводится коряво, вот кусок кода, как мне кажется, отвечающий за вывод рейтинг в профиле:
Код:
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="float:left;">
<span><em>{$rating}</em></span></div>
HTML;
	return $rated;
}
а так же код всего файла. отвечающего за рейтинг
Код:
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group 
-----------------------------------------------------
 http://dle-news.ru/ & http://webmastercity.ru/
-----------------------------------------------------
 Copyright (c) 2010 SoftNews Media Group & Yeti-Lenha
=====================================================
 Данный код защищен авторскими правами
=====================================================
 Файл: ratig.php
-----------------------------------------------------
 Назначение: Рейтинг новостей v.1.0
=====================================================
*/
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
error_reporting(E_ALL ^ E_NOTICE);
define('DATALIFEENGINE', true);
function ShowRating($id, $rating, $vote_num, $allow = true) {
global $is_logged, $member_id, $config, $lang, $db;
if ($rating=='null'){$rating="Уже Голосовали!";}else{
if ($rating) $rating = round($rating, 0); else $rating = 0;
if ($rating > 0) $rating = "<font color=green><b>Рейтинг +".$rating."</font></b>"; elseif ($rating == 0) $rating="<b>".$rating."</b>"; else $rating = "<font color=red><b>Рейтинг".$rating."</font></b>";
}
if (!$allow) {
  $rated = <<<HTML
<div class="rating" style="float:left;">
<span><em>{$rating}</em></span></div>
HTML;
return $rated;
}
$rated .= <<<HTML
<span id="ratig-layer-{$id}">
<div id="ratig-layer">
<div class="rating" style="float:left;"return false;">
  <span><em>{$rating}</em></span>
</div>
<div class="rating" style="float:left;" return false;">
  <img src="{THEME}/images/spacer.png" width="4" height="1">
</div>
   <img src="{THEME}/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="doRate('1', '{$id}'); return false;" width="18" height="18" />
   <img src="{THEME}/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" class="r2-unit" onclick="doRate('-1', '{$id}'); return false;" width="18" height="18" />
 </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;
if ($rating > 0) $rating = "<font color=green><b>Рейтинг +".$rating."</font></b>"; elseif ($rating == 0) $rating="<b>".$rating."</b>"; else $rating = "<font color=red><b>Рейтинг".$rating."</font></b>";
if (!$allow) {
  $rated = <<<HTML
<div class="rating" style="float:left;">
<span><em>{$rating}</em></span>
HTML;
return $rated;
}
$rated = "<span id=\"ratig-layer-" . $id . "\">";
$rated .= <<<HTML
<span id="ratig-layer-{$id}">
<div id="ratig-layer">
<div class="rating" style="float:left;"return false;">
  <span><em>{$rating}</em></span>
</div>
<div class="rating" style="float:left;" return false;">
  <img src="{THEME}/images/spacer.png" width="4" height="1">
</div>
   <img src="{THEME}/dleimages/up.gif" title="Нравится(+)" alt="Нравится(+)" class="r2-unit" onclick="doRate('1', '{$id}'); return false;" width="18" height="18" />
   <img src="{THEME}/dleimages/down.gif" title="Не нравится(-)" alt="Не нравится(-)" class="r2-unit" onclick="doRate('-1', '{$id}'); return false;" width="18" height="18" />
 </div>
</span>
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 * 17;
	$rated = <<<HTML
<div class="rating" style="float:left;">
<span><em>{$rating}</em></span></div>
HTML;
	return $rated;
}
?>
скажите, где косяк в php файле? рейтинг постоянно выводится как 17 это после публикации новости пользователем. а до публикации всегда 0
как я понял, рейтинг должен складываться из рейтинга статей пользователя, но почему то не работает , помогите разобравться где ошибка? запрос в бд неправильный может?
 
После добовления новости $rating выходит = 1
Далее по коду $rating = $rating * 17;
Вот и получаете 17
Добавте ещё новость и будит 34 :D

Добавлено через 9 минут
Вообще бредомодуль ))
Изначально сумирует рейтинг и количество голосов всех новостей пользователя.
Далее если есть хоты бы 1 голос есть после сумирования всех новостей то рейтинг делит на колличество голосов и округляет до целого и УМНОЖАЕТ НА 17 :D супер ! Мозг прямо таки !

Если нет рейтинг то будит 0 так как 0*17=0
Кароче бредомодуль какойто...

Добавлено через 12 минут
Вообще по теме...
Модуль вроди верно работает..
Я не пробовал но по моему должно быть норм...
Добавте 3 новости от пользователя и наголосуйте раз этак 5 за каждую и после голосования смотрите как меняется рейтинг юзверя ))
PS. dle_logs чистить если хотите без мороки наголосовать от 1 пользователя за 1 новость 5 раз ;)
 
поигрался с мускулем,как вы и рекомендовали
плюслвал и минусовал статьи
в итоге сначала было 17 потом стало 0)
оно и логично, ведь как вы говорили деление округляется до целого
тогда какой алгоритм более целесообразен при расчете рейтинга?
к примеру рейтинг = (сумма рейтинга всех статей/10)*кол-во статей
или что можно логичней придумать?

---------- Post added at 17:18 ---------- Previous post was at 16:17 ----------

что скажете по такому коду? сильно будит грузить колл-вом запросов в бд?
Код:
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'");
$raw = $db->super_query("SELECT SUM(news_num) as kn FROM " . PREFIX . "_users where name='$name'");
 if ($row['num']) $rating = round(($row['rating'] /  10), 0); else $rating = 0;
 $rating = $rating * $raw[kn];

 $rated = <<<HTML
{$rating}
HTML;

 return $rated;
}
может есть какие нить варианты упростить его? а то я слабо разбираюсь...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху