После поиска множества ресурсов / ответов по этой теме я решил написать свой собственный.Основываясь на ответе @ TaylorOtwell здесь, я обрабатываю входящий запрос $ _GET и изменяю / манипулирую каждым элементом.
Предполагая, что URL: http://domain.com/category/page.php?a=b&x=y И мне нужен только один параметр для сортировки: либо? desc = column_name или? asc = column_name.Таким образом, одного параметра url достаточно, чтобы отсортировать и упорядочить одновременно.Таким образом, URL будет http://domain.com/category/page.php?a=b&x=y&desc=column_name при первом щелчке соответствующей строки заголовка таблицы.
Затем у меня есть заголовки строк таблицы, по которым я хочу отсортировать DESC при первом щелчке, и ASC при втором щелчке.того же заголовка.(Каждый первый щелчок должен сначала «ORDER BY column DESC»). И если сортировка не выполняется, по умолчанию она будет сортироваться по «дате, затем идентификатору».
Вы можете улучшить ее, например, добавив очистку /функции фильтрации для каждого компонента $ _GET, но нижеследующая структура закладывает основу.
foreach ($_GET AS $KEY => $VALUE){
if ($KEY == 'desc'){
$SORT = $VALUE;
$ORDER = "ORDER BY $VALUE DESC";
$URL_ORDER = $URL_ORDER . "&asc=$VALUE";
} elseif ($KEY == 'asc'){
$SORT = $VALUE;
$ORDER = "ORDER BY $VALUE ASC";
$URL_ORDER = $URL_ORDER . "&desc=$VALUE";
} else {
$URL_ORDER .= "&$KEY=$VALUE";
$URL .= "&$KEY=$VALUE";
}
}
if (!$ORDER){$ORDER = 'ORDER BY date DESC, id DESC';}
if ($URL_ORDER){$URL_ORDER = $_SERVER[SCRIPT_URL] . '?' . trim($URL_ORDER, '&');}
if ($URL){$URL = $_SERVER[SCRIPT_URL] . '?' . trim($URL, '&');}
(Вы можете использовать $ _SERVER [SCRIPT_URI] для полного URL, начинающегося с http://domain.com)
Затем я используюВ результате $ ORDER я получаю выше, в запросе MySQL:
"SELECT * FROM table WHERE limiter = 'any' $ORDER";
Теперь функция, чтобы посмотреть на URL, если есть предыдущая сортировка и добавить параметр сортировки (и упорядочения) к URL с «?» или«&» в соответствии с последовательностью:
function sort_order ($_SORT){
global $SORT, $URL_ORDER, $URL;
if ($SORT == $_SORT){
return $URL_ORDER;
} else {
if (strpos($URL, '?') !== false){
return "$URL&desc=$_SORT";
} else {
return "$URL?desc=$_SORT";
}
}
}
Наконец, заголовок строки таблицы для использования функции:
echo "<th><a href='".sort_order('id')."'>ID</a></th>";
Сводка: это будет считывать URL, изменять каждый из $_GET компоненты и сделать окончательный URL с параметрами по вашему выбору с правильной формой использования "?" И "&"