Показать сообщение отдельно
  #1 (permalink)  
Старый 01.03.2015, 09:23
Аватар для Georka
Аспирант
Отправить личное сообщение для Georka Посмотреть профиль Найти все сообщения от Georka
 
Регистрация: 05.09.2013
Сообщений: 95

Сортировщик пользователей для 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'); 

?>

Последний раз редактировалось Georka, 01.03.2015 в 09:28.
Ответить с цитированием