Setelah mencari banyak sumber / jawaban tentang topik ini, saya memutuskan untuk membuat kode sendiri. Berdasarkan jawaban @ TaylorOtwell di sini, berikut adalah cara saya memproses permintaan $ _GET yang masuk dan memodifikasi / memanipulasi setiap elemen.
Dengan asumsi url adalah: http://domain.com/category/page.php?a=b&x=y
Dan saya hanya ingin satu parameter untuk penyortiran: baik? Desc = column_name atau? Asc = column_name. Dengan cara ini, parameter url tunggal cukup untuk diurutkan dan diurutkan secara bersamaan. Jadi URL-nya akan menjadi http://domain.com/category/page.php?a=b&x=y&desc=column_name pada klik pertama baris tajuk tabel terkait.
Kemudian saya memiliki judul baris tabel yang ingin saya urutkan DESC pada klik pertama saya, dan ASC pada klik kedua dari judul yang sama. (Setiap klik pertama harus "ORDER BY column DESC" terlebih dahulu) Dan jika tidak ada penyortiran, ini akan mengurutkan berdasarkan "tanggal lalu id" secara default.
Anda dapat memperbaikinya lebih jauh, seperti Anda dapat menambahkan fungsi pembersihan / pemfilteran ke setiap komponen $ _GET tetapi struktur di bawah ini meletakkan fondasinya.
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, '&');}
(Anda dapat menggunakan $ _SERVER [SCRIPT_URI] untuk URL lengkap yang diawali dengan http://domain.com )
Kemudian saya menggunakan $ ORDER yang saya dapatkan di atas, di kueri MySQL:
"SELECT * FROM table WHERE limiter = 'any' $ORDER";
Sekarang fungsi untuk melihat URL jika sebelumnya ada penyortiran dan menambahkan parameter penyortiran (dan pengurutan) ke URL dengan "?" atau "&" sesuai urutan:
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";
}
}
}
Terakhir, tajuk baris tabel untuk menggunakan fungsi:
echo "<th><a href='".sort_order('id')."'>ID</a></th>";
Ringkasan: ini akan membaca URL, mengubah setiap komponen $ _GET dan membuat URL final dengan parameter pilihan Anda dengan bentuk penggunaan yang benar dari "?" dan "&"
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Tetapi Anda memerlukanpecl install pecl_http
atau menginstal jakeasmith / http_build_url melalui komposer.