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

Тема в разделе "DLE", создана пользователем cool1991, 28 авг 2010.

Информация :
Актуальная версия DataLife Engine 11.1
( Final Release v.11.1 | Скачать DataLife Engine | Скачать 11.1 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. cool1991

    cool1991 Писатель

    Регистр.:
    9 авг 2010
    Сообщения:
    7
    Симпатии:
    1
    сабж
    модуль был скачен отсюда:
    http://dlepro.com/167-modul-zamena-standartnomu-rejtingu.html
    но рейтинг в шаблоне 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
    как я понял, рейтинг должен складываться из рейтинга статей пользователя, но почему то не работает , помогите разобравться где ошибка? запрос в бд неправильный может?
     
  2. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    После добовления новости $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 раз ;)
     
  3. cool1991

    cool1991 Писатель

    Регистр.:
    9 авг 2010
    Сообщения:
    7
    Симпатии:
    1
    поигрался с мускулем,как вы и рекомендовали
    плюслвал и минусовал статьи
    в итоге сначала было 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;
    }
    может есть какие нить варианты упростить его? а то я слабо разбираюсь...
     
Статус темы:
Закрыта.