Після пошуку багатьох ресурсів / відповідей на цю тему, я вирішив створити свій власний код. Виходячи з відповіді @ TaylorOtwell тут, саме таким чином я обробляю вхідний запит $ _GET і змінюю / маніпулюю кожним елементом.
Якщо припустити, що URL-адреса така: http://domain.com/category/page.php?a=b&x=y
І я хочу лише один параметр для сортування: або? Desc = ім'я стовпця, або? Asc = ім'я стовпця. Таким чином, одного параметра url досить для сортування та впорядкування одночасно. Таким чином, URL-адреса буде http://domain.com/category/page.php?a=b&x=y&desc=column_name при першому клацанні відповідного рядка заголовка таблиці.
Тоді у мене є заголовки рядків таблиці, які я хочу відсортувати DESC під час першого клацання, і ASC при другому клацанні того самого заголовка. (Кожен перший клацання повинен спочатку "ЗАМОВИТИ ПО СТОЛЦКУ 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-адресу з вибраними вами параметрами з правильною формою використання "?" та "&"
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Але вам знадобитьсяpecl install pecl_http
або встановіть jakeasmith / http_build_url через композитор.