Прошу помощи знатоков. Есть некий плагин для некой КМС и некий файл этого плагина. Этот файл обрабатывает данные из базы и строит топ самых активных пользователей на сайте учитывая Дату Регистрации, кол-во комментариев, кол-во страниц, файлов и постов, определяя переменную "Рейтинг" и выводя таблицу с TOP10 юзеров Сам файл вот (извиняюсь за простыню - спойлера не нашёл) Код (Text): <?PHP /* ==================== Seditio - Website engine Copyright Neocrome http://www.neocrome.net [BEGIN_SED] File=plugins/activepanel/activepanel.php Version=100 Updated=2007-sep-25 Type=Plugin Author=faust64 Description= [END_SED] [BEGIN_SED_EXTPLUGIN] Code=activepanel Part=main File=activepanel Hooks=standalone Tags= Minlevel=0 Order=10 [END_SED_EXTPLUGIN] ==================== */ if (!defined('SED_CODE')) { die('Wrong URL.'); } function count_val($sql_name, $field, $id) { $count = 0; mysql_data_seek($sql_name, 0); while ($countrow = mysql_fetch_assoc($sql_name)) {if ($countrow[$field] == $id){$count++;}} return $count; } function total_user_rating($page, $com, $posts, $pfs, $reg_date, $karma = 0, $medals = 0) { $karma_div = ($karma != 0) ? 1 : 0; $medals_div = ($medals != 0) ? 1 : 0; $reg_time = (mktime(date(d),date(m),date(Y)) - $reg_date)/86400; $total = ($page/4 + $com/10 + $posts/8 + $pfs/10 + $karma + $medals)/(5 + $karma_div + $medals_div); return round($total, 2); } $ekarma = $cfg['plugin']['activepanel']['ekarma']; $emedals = $cfg['plugin']['activepanel']['emedals']; $max_list = $cfg['plugin']['activepanel']['max_list']; $top_limit = $cfg['plugin']['activepanel']['top_limit']; $sql = sed_sql_query("SELECT * FROM $db_users WHERE user_maingrp!='2' ORDER BY user_id"); $sql1 = sed_sql_query("SELECT com_authorid FROM $db_com"); $sql2 = sed_sql_query("SELECT page_ownerid FROM $db_pages"); $sql3 = sed_sql_query("SELECT pfs_userid FROM $db_pfs"); clearstatcache(); if (file_exists("plugins/karma/")) { $sql4 = sed_sql_query("SELECT karma_recipient FROM sed_karma"); $f_karma = TRUE; } else {$f_karma = FALSE;} if (file_exists("plugins/medals/")) { $sql5 = sed_sql_query("SELECT medals_recipient FROM sed_medals"); $f_medals = TRUE; } else {$f_medals = FALSE;} $colkarma = ($ekarma && $f_karma) ? "<td class='coltop'>".$L['karma']."</td>" : ""; $colmedals = ($emedals && $f_medals) ? "<td class='coltop'>".$L['medals']."</td>" : ""; $current = ($_GET['a']>0) ? $_GET['a'] : "0"; $next = $current + $max_list; $prev = $current - $max_list; $user_list .= "<table class='cells'>"; $user_list .= "<tr><td class='coltop'>".$L['uname']."</td><td class='coltop'>".$L['mngr']."</td><td class='coltop'>".$L['level']."</td><td class='coltop'>".$L['reg']."</td><td class='coltop'>".$L['com']."</td><td class='coltop'>".$L['page']."</td><td class='coltop'>".$L['pfs']."</td><td class='coltop'>".$L['post']."</td>".$colkarma.$colmedals."<td class='coltop'>".$L['rating']."</td></tr>"; $current_pos = 0; while ($row = mysql_fetch_assoc($sql)) { $current_pos++; if ($current_pos > $current && $current_pos <= $next) { $user = sed_build_user($row['user_id'], sed_cc(stripslashes($row['user_name']))); $mngrp = sed_build_group($row['user_maingrp']); $mgrpstrs = sed_build_stars($sed_groups[$row['user_maingrp']]['level']); $regdate = date("d.m.Y", $row['user_regdate']); $comcount = count_val($sql1, "com_authorid", $row['user_id']); $pagecount = count_val($sql2, "page_ownerid", $row['user_id']); $pfscount = count_val($sql3, "pfs_userid", $row['user_id']); $postcount = $row['user_postcount']; $karma = ($ekarma && $f_karma) ? count_val($sql4,"karma_recipient",$row['user_id']) : "0"; $medals = ($emedals && $f_medals) ? count_val($sql5,"medals_recipient",$row['user_id']) : "0"; $rating = total_user_rating($pagecount, $comcount, $postcount, $pfscount, $row['user_regdate'], $karma, $medals); $karma = ($ekarma && $f_karma) ? "<td>".$karma."</td>" : ""; $medals = ($emedals && $f_medals) ? "<td>".$medals."</td>" : ""; $user_array[$rating*100][$row['user_id']] = array("str" => "<tr><td>$user</td><td>$mngrp</td><td>$mgrpstrs</td><td>$regdate</td><td>$comcount</td><td>$pagecount</td><td>$pfscount</td><td>$postcount</td>".$karma.$medals."<td>$rating</td></tr>", "user" => $user); } } krsort($user_array); foreach($user_array as $k) { foreach($k as $i) { $user_list .= $i['str']; if ($topcount < $top_limit){$top[] = $i['user'];} $topcount++; } } $user_list .= "</table>"; $top_list = implode(', ', $top); $prev_link = ($current > 0) ? "<a href='plug.php?e=activepanel&a=".$prev."'><<< ".$L['prev'].$max_list."</a>" : ""; $next_link = ($current < $current_pos-$max_list) ? "<a href='plug.php?e=activepanel&a=".$next."'>".$L['next'].$max_list." >>></a>" : ""; ?> Всё считает, обрабатывает, но... В этом фале работает функция krsort($user_array), и работает коряво - она должна выводить сортировку по рейтингу, а выводит сортировку по дате регистрации юзера. Оч. прошу, подскажите, где подкрутить, чтоб сортировало по рейтингу, его же высчитываем!
Я попробовал uasort, usort, uksort. Заработало, сортирует по рейтингу, но везде ругается на значение ключа функции (как я понял) Warning: Wrong parameter count for uksort() in ..../activepanel.inc.php on line 108 line 108 это Код (Text): krsort($user_array); что не правильно?
Абалденный форум. Всем спасибо за помощь, отзывчивость и оперативность! Модеры и админы, ТАК ДЕРЖАТЬ!
неправильно: 1. если Warning: Wrong parameter count for uksort() in ..../activepanel.inc.php on line 108 то в 108 строке не может быть krsort($user_array); 2. uksort требует два параметра - собственно массив и callback функцию сравнения. Собственно, Wrong parameter count и означает - неправильное количество параметров. Наверно админы и модеры решили что перевод с английского сообщения об ошибке не требует их вмешательства. Oughtem, так держать не надо.