Выборка с сортировкой
(запрос sort)

sort.tpl
<?php

echo "
    <table>
        <tr>
        <th> </th>
        <th><a href='?page=$page&block=$block&sort[1]=asc'>Столбец 1</a></th>
        <th><a href='?page=$page&block=$block&sort[2]=asc'>Столбец 2</a></th>
        <th><a href='?page=$page&block=$block&sort[3]=asc'>Столбец 3</a></th>
        </tr>
";
foreach ($tab as $dat)
echo "
        <tr>
        <td>{$dat['edit']}</td>
        <td>$dat[1]</td>
        <td>$dat[2]</td>
        <td>$dat[3]</td>
        </tr>
";
echo "
    </table>";

?>

sort.tdd
<?php

$types[1] = 'varchar(100)';
$types[2] = 'varchar(100)';
$types[3] = 'varchar(100)';

$params['multi-record'] = true;

?>

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

Направление сортировки

Если нужно задать определенное направление сортировки, параметру нужно присвоить одно их значений: asc или desc, для прямого или обратного порядка сортировки, соответственно, например:

<a href='?page=$page&block=$block&sort[3]=desc'>Сортировать</a>

Для автоматического переключения направления сортировки на противоположный, можно применить следующий код:

Переключатель направления сортировки
<?php
    $order = (Request::get($block, 'sort', 3)=='desc') ? 'asc' : 'desc';
    ...'&sort[3]='.$order.'...
?>

Сортировка по нескольким столбцам

Возможна также сортировка по нескольким столбцам. В приведенном ниже примере записи будут отсортированы в возрастающем порядке по первому полю, а для записей у которых значения в первом поле совпадают, дополнительно будет происходить сортировка по второму полю в убывающем порядке.

<a href='?page=$page&block=$block&sort[1]=asc&sort[2]=desc'>Сортировать</a>

Приоритет сортировки столбцов задается порядком элементов массива в запросе.

Объявление параметров сортировки по умолчанию в дескрипторе

Если сортировка записей должна производиться всегда и в одном и том же порядке, то предпочтительней объявить параметры сортировки в дескрипторе.

.tdd
$params['sort'][1] = 'asc'; 
$params['sort'][2] = 'desc';

Порядок элементов массива определяет приоритеты при осуществлении многостолбцовой сортировки — в первую очередь сортировка будет производиться по тому столбцу, сортировка которого объявлена раньше.

Теперь URL получатся более короткими и более привлекательными для поисковых роботов:

<a href='?page=$page&block=$block&sort[1]=asc&sort[2]=desc'>Страница 2</a>

К тому же, индексация ссылок с sort-запросами по умолчанию вообще запрещена (в robots.txt).

Запросы сортировки через URL можно применять по-прежнему — они будут просто перебивать параметры, заданные в дескрипторе.


См. также