Sau khi tìm kiếm nhiều tài nguyên / câu trả lời về chủ đề này, tôi quyết định viết mã của riêng mình. Dựa trên câu trả lời của @ TaylorOtwell ở đây, đây là cách tôi xử lý yêu cầu $ _GET đến và sửa đổi / thao tác từng phần tử.
Giả sử url là: http://domain.com/category/page.php?a=b&x=y
Và tôi chỉ muốn một tham số để sắp xếp: hoặc? Desc = column_name hoặc? Asc = column_name. Bằng cách này, một tham số url đủ để sắp xếp và sắp xếp đồng thời. Vì vậy, URL sẽ là http://domain.com/category/page.php?a=b&x=y&desc=column_name khi nhấp chuột đầu tiên vào hàng tiêu đề bảng được liên kết.
Sau đó, tôi có các tiêu đề hàng trong bảng mà tôi muốn sắp xếp DESC trong lần nhấp đầu tiên và ASC trong lần nhấp thứ hai của cùng một tiêu đề. (Mỗi lần nhấp đầu tiên nên "ĐẶT HÀNG THEO cột MÔ TẢ" trước) Và nếu không có sắp xếp, nó sẽ sắp xếp theo "ngày tháng rồi đến id" theo mặc định.
Bạn có thể cải thiện nó hơn nữa, chẳng hạn như bạn có thể thêm các chức năng làm sạch / lọc cho từng thành phần $ _GET nhưng cấu trúc bên dưới là nền tảng.
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, '&');}
(Bạn có thể sử dụng $ _SERVER [SCRIPT_URI] cho URL đầy đủ bắt đầu bằng http://domain.com )
Sau đó, tôi sử dụng $ ORDER kết quả mà tôi nhận được ở trên, trong truy vấn MySQL:
"SELECT * FROM table WHERE limiter = 'any' $ORDER";
Bây giờ, chức năng xem URL nếu có một thông số sắp xếp trước đó và thêm thông số sắp xếp (và sắp xếp) vào URL với "?" hoặc "&" theo trình tự:
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";
}
}
}
Cuối cùng, tiêu đề hàng của bảng để sử dụng hàm:
echo "<th><a href='".sort_order('id')."'>ID</a></th>";
Tóm tắt: điều này sẽ đọc URL, sửa đổi từng thành phần $ _GET và tạo URL cuối cùng với các tham số bạn chọn với hình thức sử dụng chính xác của "?" và "&"
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Nhưng bạn sẽ cầnpecl install pecl_http
hoặc cài đặt jakeasmith / http_build_url qua trình soạn nhạc.