このトピックに関する多くのリソース/回答を検索した後、私は自分でコーディングすることにしました。ここでの@TaylorOtwellの回答に基づいて、これが着信$ _GETリクエストを処理し、各要素を変更/操作する方法です。
URLが次のようになっていると仮定します:http
://domain.com/category/page.php?a = b&x = yそして、ソート用のパラメーターは?desc = column_nameまたは?asc = column_nameのいずれか1つだけです。このように、単一のurlパラメータでソートと順序付けを同時に行うことができます。したがって、関連するテーブルヘッダー行を最初にクリックすると、URLはhttp://domain.com/category/page.php?a=b&x=y&desc=column_nameになります。
次に、最初のクリックでDESCを並べ替え、同じ見出しの2回目のクリックでASCを並べ替えるテーブル行見出しがあります。(最初にクリックするたびに、最初に「ORDER BY columnDESC」を実行する必要があります)また、並べ替えがない場合は、デフォルトで「datethenid」で並べ替えられます。
各$ _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, '&');}
(http://domain.comで始まる完全なURLには$ _SERVER [SCRIPT_URI]を使用できます)
次に、MySQLクエリで上記の$ ORDERを使用します。
"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);
。ただし、composerを介してjakeasmith / http_build_urlが必要pecl install pecl_http
またはインストールされます。