使用GET请求排序列表

时间:2013-03-25 21:45:09

标签: php codeigniter sorting get

我有一个由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']等于原始网址加&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次排序。

这个问题的解决方案是什么?我在这里遗漏了一些基本的东西并使问题完全复杂化吗?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

执行正则表达式匹配以删除先前的排序剩余。

 preg_replace('/\&sort\-by\=([a-zA-Z0-9-_]+)/','',$_SERVER['REQUEST_URI']);

答案 2 :(得分: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>