Bu konuda birçok kaynak / cevap aradıktan sonra, kendi kodumu yazmaya karar verdim. @ TaylorOtwell'in buradaki cevabına dayanarak, gelen $ _GET talebini bu şekilde işlerim ve her bir öğeyi değiştirir / değiştiririm.
Url'nin şu olduğunu varsayarsak: http://domain.com/category/page.php?a=b&x=y
Ve sıralamak için sadece bir parametre istiyorum: ya? Desc = sütun_adı ya da? Asc = sütun_adı. Bu şekilde, tek url parametresi aynı anda sıralamak ve düzenlemek için yeterlidir. Dolayısıyla URL , ilişkili tablo başlığı satırının ilk tıklamasıyla http://domain.com/category/page.php?a=b&x=y&desc=column_name olacaktır .
Ardından, ilk tıklamamda DESC ve aynı başlığın ikinci tıklamasında ASC sıralamak istediğim tablo satırı başlıklarım var. (Her ilk tıklama önce "SİPARİŞ TARAFINDAN SİPARİŞ VER" olmalıdır) Ve eğer sıralama yoksa, varsayılan olarak "tarih sonra id" e göre sıralanır.
Her $ _GET bileşenine temizleme / filtreleme işlevleri ekleyebileceğiniz gibi, ancak aşağıdaki yapı temeli oluşturduğu gibi, onu daha da geliştirebilirsiniz.
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, '&');}
( Http://domain.com ile başlayan tam URL için $ _SERVER [SCRIPT_URI] kullanabilirsiniz )
Sonra MySQL sorgusunda yukarıda aldığım $ ORDER sonucunu kullanıyorum:
"SELECT * FROM table WHERE limiter = 'any' $ORDER";
Şimdi işlev, önceki bir sıralama varsa URL'ye bakma ve "?" İle URL'ye sıralama (ve sıralama) parametresi ekleme işlevi. veya sıraya göre "&":
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";
}
}
}
Son olarak, işlevi kullanmak için tablo satırı başlığı:
echo "<th><a href='".sort_order('id')."'>ID</a></th>";
Özet: Bu, URL'yi okur, $ _GET bileşenlerinin her birini değiştirir ve nihai URL'yi, seçtiğiniz parametrelerle doğru kullanım biçimi "?" İle yapar. ve "&"
echo http_build_url($url, array("query" => "the=query&parts=here"), HTTP_URL_JOIN_QUERY);
. Ancak composer aracılığıyla jakeasmith / http_build_url'ye ihtiyacınız olacakpecl install pecl_http
veya kuracaksınız .