Рейтинг и Сила пользователя для Veppa

PHP
Благодаря пользователю Deman1608 с нашего форума, родилась идея создания рейтинга пользователя в CMS Veppa.
Рейтинг состоит из двух основных частей, таких как Рейтинг пользователя и его Скилл — сила пользователя.
Реализация такого рейтинга совсем проста, но это пока что грубый макет разработки и постепенно его нужно будет допиливать и усовершенствовать, ну а пока что перейдем к рассуждению что есть что и непосредственно к самому коду.

Как рассчитывается Рейтинг пользователя и от чего он зависит:
На данный момент рейтинг зависит от голосования на обои.
При голосовании гостем (не авторизованный пользователем) к рейтингу пользователя добавившего обои начисляется рейтинг 0.040, при этом если учитывается что нужно сделать, отнять или прибавить сумму рейтинга.
При голосовании пользователя имеющего уже какой то положительный рейтинг берется сумма его рейтинга делится на 100 и прибавляется к полученному результату 0.100

Рейтинг пользователя/100/0.040

3,534 / 100 + 0.040


В итоге к рейтингу пользователя добавившему обои прибавляется сумма 0,075, вместо стандартных 0.040

Абсолютно тоже самое делается и с его силой, от силы пользователя зависит сила рейтинга пользователя.

Давайте приступим к установке
Для начала нам нужно в таблице пользователей создать два дополнительных поля
Откройте базу данных, нажмите на таблицу vws_user, затем кликните по кнопке Структура, под полями есть строчка для добавления Поля.
Введите число 2 и выберите добавить после added_by

Поле номер 1:
Название: user_skill
Тип: FLOAT
По умолчанию: Как определено: 0.000
Атрибуты: UNSIGNED

Поле номер 2:
Название: user_rating
Тип: FLOAT
По умолчанию: Как определено: 0.000

нажимаем кнопку сохранить. С базой все, теперь приступим к коду
Откроем файл /sys/app/models/User.php
Заменяем
'added_by' => 1


На это

'added_by' => 1,
'user_skill' =>1,
'user_rating'=>1


Открываем файл /sys/app/models/Vote.php
Перед последней фигурной скобкой
}


Вставляем функцию

static function SkillRating($UserIdWall, $UserIdRating, $Rate){      
        
            //$Rate = +1;
            //$RateDwn = $Rate > 0 ? ' + ' : ' - ' ;
            if($UserIdRating != 0) {
                $sql = self::findOneFrom('User','id = ' . $UserIdRating . '',array());          
                //$sql_user_skill = 0.101; // получили скилл
                $user_skill = $sql->user_skill <= 0.100 ? 0.100 : $sql->user_skill / 100 + 0.100 ;
                $user_skill = round($user_skill, 3) ;
                
                //$sql_user_rating = 0.000 ; // получили рейтинг
                $user_rating = $sql->user_rating <= 0.040 ? 0.040 : $sql->user_rating / 100 + 0.040 ;
                $user_rating = round($user_rating, 3) ;
                
            } else {
                
                $user_skill = 0.100;
                $user_rating = 0.040;
            }
            
        $sql = self::findOneFrom('User','id = ' . $UserIdWall . '',array());
            if($sql) {
                $userSkill = $sql->user_skill ;
                $userRating = $sql->user_rating ;
                    // insert new record
                    $user = new User();
                    $user->id = $UserIdWall;
                    if($Rate > 0) {
                        $user->user_skill = $userSkill + $user_skill / 2;
                        $user->user_rating = $userRating + $user_rating / 2; 
                    } else {
                        $user->user_skill = $userSkill - $user_skill / 2;
                        $user->user_rating = $userRating - $user_rating / 2;
                    }   

                    $user->save('id');
            }
        
        }


Открываем файл /sys/app/models/Thumbgrid.php
Ищем
rate="+1"


Меняем на
rate="+1_' . $cell->added_by . '_' . (AuthUser::$user->id == '' ? 0 : AuthUser::$user->id) . '"


Ищем
rate="-1"


Меняем на
rate="-1_' . $cell->added_by . '_' . (AuthUser::$user->id == '' ? 0 : AuthUser::$user->id) . '"


Открываем файл /sys/app/models/IndexController.php
Ищем функцию
function rate() {
.......
}


Заменяем ее
function rate()
    {
        //rate wallpaper 
        $w_id = $_POST['id'];
        $rating = $_POST['rate'];

        $arr = explode('_', $rating) ;

        echo Vote::SkillRating($arr[1], $arr[2], $arr[0]);
        echo Vote::vote($w_id, $arr[0]);
        exit();
    }


Теперь при добавлении голоса за картинку, будет добавляться или рейтинг пользователю.
Выводить рейтинг пользователя я пока еще не решил где и как, так как сейчас пока еще тестирую данный рейтинг, но после теста обязательно напишу где и как я его вывел.

Продолжение темы scriptland.com.ua/blog/php/16.html

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.