Сортировщик пользователей для DLE 10.3 + по дополнительным полям
Всем привет ) Ребят помогите пожалуйста в написании кода сортировки пользователей для DLE 10.3.
Сейчас код выполняет сортировку по: {count} - Выбор количества отображаемых пользователей {order} - 2 select не совсем понимаю, но там: Логин, Группа, Регистрация, Вход, Новостей, Комментариев. {sort} - 3 select : по Возрастанию и по Убыванию {usergroups}- 4 select : по Группам Демо: ТУТ Нужна сортировка по: - Выбор количества отображаемых пользователей на текущей странице (уже есть), - Дополнительному полю профиля пользователя "spec", - Городу пользователя, - Дополнительному полю профиля пользователя "price", - Выбору 2 групп: С ID 3 Журналисты или ID 4 Посетители. Вот исполняемый PHP код: <?php if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); } include_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $parse->safe_mode = true; $tpl->load_template( 'users_search.tpl' ); $g = 0; $_GET['count'] = intval($_GET['count']); $_GET['order'] = addslashes($_GET['order']); $_GET['sort'] = addslashes($_GET['sort']); $_GET['usergroups'] = intval($_GET['usergroups']); $_GET['login'] = addslashes($_GET['login']); while ( $g++ <= 4 ){ $u = $g * 20; if($_GET['count'] != $u) $sel_num .= '<option value="'.$u.'">'.$u.'</option>'; else $sel_num .= '<option value="'.$u.'" selected>'.$u.'</option>'; } $tpl->set('{count}', $sel_num); $orders = array('name' => 'Логин', 'user_group' => 'Группа', 'reg_date' => 'Регистрация', 'lastdate' => 'Вход', 'news_num' => 'Новостей', 'comm_num' => 'Комментариев'); foreach ( $orders as $key => $value){ if($_GET['order'] == $key) $order .= '<option value="'.$key.'" selected>'.$value.'</option>'; else $order .= '<option value="'.$key.'">'.$value.'</option>'; } $tpl->set('{order}', $order); $sorts = array('ASC' => 'По возрастанию', 'DESC' => 'По убыванию'); foreach ( $sorts as $key => $value){ if($_GET['sort'] == $key) $sort .= '<option value="'.$key.'" selected>'.$value.'</option>'; else $sort .= '<option value="'.$key.'">'.$value.'</option>'; } $tpl->set('{sort}', $sort); $usergroups = $db->query( "SELECT * FROM " . USERPREFIX . "_usergroups"); while ( $row = $db->get_row( $usergroups ) ) { if($_GET['usergroups'] == $row['id']) $group_s .= '<option value="'.$row['id'].'" selected>'.$row['group_name'].'</option>'; else $group_s .= '<option value="'.$row['id'].'">'.$row['group_name'].'</option>'; } $tpl->set('{usergroups}', $group_s); if ($_GET['count'] != ""){ $searchcount = intval($_GET['count']); $postfix .= "&count=$searchcount"; }else { $searchcount = 10; } if($_GET['order'] != ""){ $order_by = $_GET['order']; $postfix .= "&order=".$_GET['order']; }else $order_by = "user_group"; if ($_GET['sort'] != ""){ $sort_by = $_GET['sort']; $postfix .= "&sort=".$_GET['sort']; }else { $sort_by = "ASC"; } if ($_GET['usergroups'] != "" or $_GET['login'] != "") $where_w = "WHERE "; if ($_GET['usergroups'] != ""){ $where_w .= "user_group=".$_GET['usergroups']; $postfix .= "&usergroups=".$_GET['usergroups']; } if ($_GET['login'] != ""){ if ($_GET['usergroups'] != "") $where_w .= " AND "; $where_w .= "name like '%".$_GET['login']."%'"; $postfix .= "&login=".$_GET['login']; $login_val = $_GET['login']; } $tpl->set('{login}', $login_val); $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_users $where_w"; $row = $db->super_query($sql_count); $count_all = $row['count']; function pluralForm($count_all, $numb1, $numb2, $numb3) { $count_all = abs($count_all) % 100; $n1 = $count_all % 10; if ($count_all > 10 && $count_all < 20) return $numb3; if ($n1 > 1 && $n1 < 5) return $numb2; if ($n1 == 1) return $numb1; return $numb3; } $tpl->set('{numbers}', pluralForm($count_all, 'Найден', 'Найдено', 'Найдено').' '.$count_all.' '.pluralForm($count_all, 'пользователь', 'пользвателя', 'пользователей')); $tpl->compile('content'); ?> |
$_GET['count'] = intval($_GET['count']);
.... $searchcount = intval($_GET['count']); То есть типа контрольного выстрела в голову? ) |
Прочитай описание.. я расписал то что нужно,.. если ты знаком с DLE то поймешь. Готов заплатить 2000 рублей.
|
Прочитал конечно, а поэтому и не понятно, зачем к приведенному к integer значению массива применять эту операцию еще раз.
С чем я знаком, а с чем нет, это не имеет значения, принципы сортировки не зависят от CMS. {count} - Выбор количества отображаемых пользователей //это не сортировка это LIMIT {order} - 2 select не совсем понимаю, но там: Логин, Группа, Регистрация, Вход, Новостей, Комментариев. //а вот это сортировка {sort} - 3 select : по Возрастанию и по Убыванию //это порядок сортировки {usergroups}- 4 select : по Группам //это может быть и группировкой в запросе Если к примеру, имеется таблица, щелчок по заголовкам которой означает сортировку по выбранной таким образом колонке, то достаточно передать серверу индекс этой колонки, который определит поле sql-таблицы для ORDER BY выбранное по этому индексу в массиве типа $orders, но с иной структурой. Направление сортировки можно и не передавать, если сервер будет хранить текущее имя поля сортировки и ее порядок, то легко определить первый ли это запрос сортировки по запрашиваемому полю, или же второй и надо просто изменить порядок ASC/DESC. Если же сортировка, это сортировка по нескольким полям, то поступать можно точно также, с разницей лишь в том, что из массива $orders посредством array_intersect_key($orders, $in) получаем все поля участвующие в сортировке. У вас же сплошные условия. Если бы было предложено и на порядок выше, я бы не согласился. Уже более 5 лет я даже слышать не хочу о джумлах, dle, и прочих, а не то чтобы вновь заниматься ими. У них есть форумы своих фанатов, вот там с готовностью ваш заказ примут. |
Скажи пожалуйста ты сможешь сделать то что мне нужно? я заплачу 2000 руб.
|
Как бы это деликатно пояснить, чтобы не было лишних вопросов.
Я могу описать сортировку, параметры ее определяемые клиентом и выходные параметры от них зависящие, естественно в рамках поставленной задачи - от интерфейса клиента до параметров запроса. Чего я больше и никогда делать не буду, и о чем говорил, так это думать в рамках чей-то CMS, просто для меня это, как работать из под палки. Вы ездили на своем автомобиле в черта города и вне ее, разницу чувствовали? Я больше не хочу ездить по чужим правилам, останавливаться на светофорах не мной расставленных, и которые в моем понимании лишние, решать проблемы пробок не от меня зависящих. Я хочу свободы в движении. Давно существует булева алгебра и логические устройства ее использующие, например дешифратор. Он ведь работает не по условиям, а как простейший цифровой автомат выполняющий логические операции - выходные шины его будут иметь состояния зависящие от состояния на входных шинах. В рамках РНР роль такого дешифратора можно возложить на массив - ключи, это входные шины, а значения ключей выходные. Такому "аналогу дешифратора" сигналы на входных шинах: $_GET['count'] = intval($_GET['count']); $_GET['order'] = addslashes($_GET['order']); $_GET['sort'] = addslashes($_GET['sort']); $_GET['usergroups'] = intval($_GET['usergroups']); $_GET['login'] = addslashes($_GET['login']); совсем не нужны, да и вредно вываливать клиенту структуру таблиц. Поступая таким образом, это усложнять себе же задачу, потому как в данном случае достаточно чисел, что удобнее и безопаснее, а следовательно сигналы на входе автомата, это: $_GET = array_map('intval', $_GET) Входные параметры равные нулю после этой операции будут считаться параметрами по умолчанию. Каждый из этих параметров и будет определять ключ массива, который описывает набор правил (параметров sql-запроса) выбранных пользователем. Например, если сортировать по дате, то параметр $_GET['sort'] это ключ хранящий поле таблицы, а $_GET['order'] направление сортировки (хотя это можно и не передавать). Но если запрашивать сортировку по числу записей и это число указывается пользователем, то ключ хранящий поле таблицы должен учитывать и значение выбранное пользователем, потому как в этом случае значением для ORDER BY будет уже выражение. Результат выборки по параметрам выданный этим автоматом будет и отсортирован, и иметь только запрошенное. Не думаю, что это так сложно сделать. |
Часовой пояс GMT +3, время: 09:01. |