1

次のようなGETリクエストによってトリガーされる検索関数があります。http://localhost:8888/TESTCI/search/get_books?i-slider=7.0&rt-slider=70&start-year=1955&end-year=2013&genre=all&language=all

それはすべて問題なく、検索機能は期待どおりに機能します。年、ジャンル、言語などに基づいて結果を並べ替えたい場合に問題が発生します。並べ替えに使用しようとしている結果ページにいくつかのリンクがあります。ページに値を再送信するためのフォームがないことを考えると、リンクを現在のURLに並べ替え用のGETパラメーターを加えたものと等しくすることが私の考えでした。年の並べ替えの例は次のとおりです。

$year_sort_class = "ui-btn-active ui-state-persist sort-desc";
$year_sort_order = "&sort-by=year-asc";

<li class="<?php echo $year_sort_class ?>"><a href="<?php echo $_SERVER['REQUEST_URI'].$year_sort_order ?>">Year</a></li>

並べ替え後に発生する明らかな問題は$_SERVER['REQUEST_URI']、元のURLに。を加えたものに等しいこと&sort-by=year-ascです。つまり、ジャンル、言語、または年ごとに、さらに並べ替えるとURLに継続的に追加され、次のようなURLになります。

 http://localhost:8888/TESTCI/search/get_books?i-slider=7.0&rt-slider=70&start-year=1955&end-year=2013&genre=all&language=all&sort-by=rt-desc&sort-by=i-desc&sort-by=year-desc&sort-by=i-desc 

4ソート後。

この問題の解決策は何ですか?私はここで基本的な何かを見逃していて、問題を完全に複雑にしていますか?

4

3 に答える 3

1

このようなことを試してください...

<?
    $href = explode('?',$_SERVER['REQUEST_URI']);
    $href = $href[0];

    $qs = array();
    foreach ($_GET as $param => $val) {
       if ($param != 'sort-by') $qs[$params] = $val;
    }
?>

<a href="<?=$href.'?'.implode('&',$qs).'&sort-by="year"?>">Year</a>
于 2013-03-25T21:59:40.737 に答える
0

正規表現の一致を実行して、前の並べ替えの残りを削除します。

 preg_replace('/\&sort\-by\=([a-zA-Z0-9-_]+)/','',$_SERVER['REQUEST_URI']);
于 2013-03-25T21:57:25.900 に答える
0

baseUrl変数を導入して、関数でラップすることができます

function buildLink($sort = "year-asc", $foo = "default") {
  $baseUrl = "http://localhost:8888/TESTCI/search/get_books?";
  return $baseurl.$sort."&".$foo;
}

print "<a href='".buildLink("year-desc")."'>My Book</a>
于 2013-03-25T22:01:16.600 に答える