 
Выборка с сортировкой (запрос sort)
sort.tpl
<?php
echo "
<table>
<tr>
<th> </th>
<th><a href='?page=$page&block=$block&sort[1]'>Столбец 1</a></th>
<th><a href='?page=$page&block=$block&sort[2]'>Столбец 2</a></th>
<th><a href='?page=$page&block=$block&sort[3]'>Столбец 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>
$saveSorted
";
?>
sort.tdd
<?php
$types[1] = 'varchar(100)';
$types[2] = 'varchar(100)';
$types[3] = 'varchar(100)';
$params['isMultiRec'] = true;
?>
В первой строке таблицы даны ссылки на сортировку по столбцам.
При щелчке по ссылке, соответствующий столбец будет отсортирован по алфавиту в возрастающем порядке.
При повторном щелчке по той же ссылке, направление сортировки поменяется на противоположное.
Сортировка в определенном порядке
Если нужно задать определенное направление сортировки, параметру нужно присвоить одно их значений: asc или desc, для прямого или обратного порядка сортировки, соответственно, например:
<a href='?page=$page&block=$block&sort[1]=desc'>Сортировать</a>
Сортировка по нескольким столбцам
Возможна также сортировка по нескольким столбцам.
В приведенном ниже примере записи будут отсортированы в возрастающем порядке по первому полю, а для записей у которых значения в первом поле совпадают,
дополнительно будет происходить сортировка по второму полю в убывающем порядке.
<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 можно применять по-прежнему — они будут просто перебивать параметры, заданные в дескрипторе.
Сохранение нового порядка записей
Запросы сортировки не затрагивает порядка данных непосредственно в базе данных. Однако, данные в отсортированном виде в базе данных можно сохранить. Существует несколько способов:
-
Самый предпочтительный способ это — сортировка записей в окне сортировки. Это окно можно открыть через меню окна редактирования > Блок > Сортировка записей.
-
Если посмотреть на самый первый пример шаблона, то под таблицей можно увидеть переменную $saveSorted – в этой переменной заключен код кнопки сохранения нового порядка записей. Кнопка сохранения нового порядка записей появляется после команды сортировки или команды на обратный порядок записей, и после щелчка по ней, данные будут сохранены в базе данных в новом порядке.
Кнопку сохранения нового порядка записей видят только пользователи с правом редактирования блока.
-
Если вы хотите отображать кнопку сохранения нового порядка в своем стиле, то можете непосредственно записать в шаблоне ее код. URL сохранения сортировки отличается от обычного запроса сортировки тем, что параметр page заменен на saveSorted:
<a href='?saveSorted&block=$block&sort[1]=asc'>Сортировать и сохранить</a>
Как видно из кода, запускается скрипт saveSorted. Более того, предварительные запросы сортировки никак не влияют работу этого скрипта – параметры сортировки нужно передавать непосредственно скрипту. Отсюда следует, что
если пользователю нужно просто сохранить отсортированный порядок записей, ему достаточно показать одну кнопку с запросом saveSorted (без других кнопок предварительной сортировки).
Сохраненять новый порядок записей могут только редакторы сортируемого блока.
См. также
|