Pull to refresh

CMS NetCat — Сортировка объектов в таблице

Reading time2 min
Views1.7K
Предлагаю свое решение для сортировки объектов компоненты представленных в виде таблицы. Я использую его достаточно часто, возможно будет кому то полезно.

1. Меняем заголовок столбца на функцию, которая подставит нужную ссылку

".sort_header('Message_ID','ID')."


тут Message_ID — поле по которому будем сортировать, ID — название столбца
функцию sort_header() описываем в дефолтном модуле

function sort_header($fild,$header, $wrap=0){
global $sub,$cc,$sort,$order;
/*
* Убираем из URI параметры sort, order, sid.
* Остальные надо оставить, т.к. в них может быть много полезного, например в беке или фронте открываем
* или данные фильтра
*/
$param="";
$separator='?';
foreach ($_GET as $key => $value) {
if($key!='sort' && $key!='order' && $key!='sid')
{
$param .=$separator.$key."=".$value;
$separator='&';
}
}

// Собераем ссылку.
if($wrap==0)
{
$out .="";
}

$out .="<a href='$param&sort=$fild";
if($sort==$fild && $order !='ASC')
{
$out .="&order=ASC";
}
$out .="'>$header";
$out .="";
if($sort==$fild && $order =='ASC')
{
$out .=" ";
}
elseif($sort==$fild)
{
$out .=" ";
}
if($wrap==0)
{
$out .="
";
}
return $out;
}


Тут все просто.
Передаем функции три параметра: поле для сортировки, название столбца и флаг, допустимы или нет переносы в заглавие. По умолчанию они запрещены.

2. Чтоб сортировка работала надо изменить запрос. Для этого в настройках компоненты пишем:
$query_order = sort_set();


sort_set() описываем в дефолтном модуле

function sort_set(){
global $inside_admin,$sort,$order,$classID;
// узнаем есть ли в этой таблице такой столбец. Если этого не сделать, то на сайте могут быть ошибки
$sql = "SHOW COLUMNS FROM Message".$classID." WHERE Field = '".$sort."'";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
if($num_rows == 1)
{
if($order=='ASC')
{
$order = 'ASC';
}
else
{
$order = 'DESC';
}
// Собираем строку, которая будет дополненна в $query_order
$out="a.".$sort." ".$order;
return $out;
}
else
{
return;
}
}


Все.
Итого, для сортировки нужно дополнить систему двумя функциями, после чего заголовки столбцов поменять на вызов одной из них и в настройках компоненты указать другую. Вроде не сложно. Буду рад если кому пригодится.
Tags:
Hubs:
Total votes 6: ↑2 and ↓4-2
Comments1

Articles