» »

Система уровней пользователей для сайта uCoz

Система уровней пользователей для сайта uCoz

Если на вашем сайте следят за репутацией, и пользователь ее устанавливает, есть тема по уровню, что устанавливать в аналогичном порядке. Сама система будет работает за счёт активности зарегистрированного пользователя на интернет ресурсе. Здесь будет учитывается все, можно сказать каждый шаг, что был произведен на портале. Это количество материалов, что было размещено на ресурсе, также учитываются комментарий и безусловно репутация. Как пример: Вы поставили для репутации множитель "3", если у пользователя репутация "5", то в очки уровня засчитывается "15" (5*3).

Система выводит следующие параметры:
$scoreSL - текущее кол-во очков пользователя;
$levelSL - текущий уровень пользователя;
$thisLvl - кол-во очков у текущего уровня;
$NextLS - кол-во очков у следующего уровня;
$scoreNextLvl - требуемое кол-во очков для следующего уровня.

Установка:

Всё что Вам нужно, это добавить данный код на страницу пользователя в конец body.
ПУ > Управление дизайном > Персональная страница пользователя

Код
<script>  
// Активность  
var $SLuser = [// 'количество', 'множитель'  
['$_BLOG_ENTRIES$', '1'], ['$_BOARD_ENTRIES$', '1'], ['$_COM_ENTRIES$', '1'],  
['$_FORUM_ENTRIES$', '1'], ['$_LOAD_ENTRIES$', '1'], ['$_NEWS_ENTRIES$', '1'],  
['$_PHOTO_ENTRIES$', '1'], ['$_PUBL_ENTRIES$', '1'], ['$_STUFF_ENTRIES$', '1'],  
['$_SHOP_ENTRIES$', '1'], ['$_VIDEO_ENTRIES$', '1'], ['$_RANK$', '1'], ['$_REPUTATION$', '1']  
];  

// Уровни  
var $SLlevel = [];  
for(var i=0; i<=100; i++){$SLlevel[i] = i*5}; // Генерация уровней (100)  

/* Или так  
$SLlevel = ['5','10','15','20','25','30'];  
*/  

// **************  
function CheckUserScore(arr) {  
return arr.map(a => a.reduce((a, c) => a * +c, 1)).reduce((a, c) => a + c, 0);  
};  
var $scoreSL = CheckUserScore($SLuser);  

function CheckUserLevel(arr, toFind) {  
if(!arr) return -1;  
var first = 0, last = arr.length - 1;  
while(first < last) {  
var mid = first + Math.floor((last - first) / 2);  
if (arr[mid] >= toFind) last = mid; else first = mid + 1;  
}  
if(arr[last] == toFind || last == 0 || last == arr.length - 1) return last; else return last - 1;  
};  
var $levelSL = CheckUserLevel($SLlevel, $scoreSL) + 1; // +1 потому что массив начинается с нуля.  

var $NextLS = $SLlevel[$levelSL];  

var $thisLvl = $SLlevel[$levelSL-1];  

var $scoreNextLvl = ($NextLS - $scoreSL);  
// **************  

console.info('Кол-во очков: '+$scoreSL);  
console.info('Уровень: '+$levelSL);  
console.info('Кол-во очков у уровня: '+$thisLvl);  
console.info('Кол-во очков у след. уровня: '+$NextLS);  
console.info('Кол-во очков до след. уровня: '+$scoreNextLvl);  
</script>


!! ВАЖНО !!
Я выкладываю только код системы, не визуализацию.
На превью материала представлена реализация.
Это альфа версия! Баги и предложения описывайте в комментариях здесь - ссылка

Для заказа визуальной части обращаться ко мне: ссылка

Источник: http://pandora.clan.su/
29.06.2018 Просмотров: 255 Комментарий: (5)

Поделиться в социальных сетях

Материал разместил

Комментарий: 5
BlackHARD
BlackHARD 29.06.2018 15:121
+1
Если по умолчанию множитель 1, то быстро ли поднимается уровень? Просто не хочу, чтобы баловались, чтобы всё умеренно было. Ато набьют 100 уровней за день.
Kosten
Kosten 29.06.2018 15:252
0
BlackHARD, приветствую, кратко не напишите, как работает по сути этот материал.
CbIPoK2513
CbIPoK2513 29.06.2018 15:443
0
BlackHARD, если есть познания в JQ, то можно или вручную прописать очки для уровней и их кол-во или сделать цикл, который будет генерировать уровни (я себе так сделал).
К тому же, множитель можно сделать и десятичными (типо 0.5 за комментарий)
BlackHARD
BlackHARD 29.06.2018 17:394
+1
Спасибо, примерно понял, возьму калькулятор и буду подбирать :D
waak
waak 29.06.2018 18:295
+1
можно и правильнее сделать иначе просто для разных разделов сделать свой множитель ти по так
комментарии 0.1 файлы 0.5 форум 0.2 м тд цифры к примеру

Так как комментарии можно писать сколько угодно то и балы за них минимум а файлы другое дела их не добавишь 100 в день хотя если и добавят то вам же лучше!
avatar