在分页期间保持url参数

时间:2012-03-12 12:21:32

标签: php pagination

在分页时是否有任何方法可以保留我的GET参数。

我的问题是我有几个不同的网址,即

questions.php?sort=votes&author_id=1&page=3

index.php?sort=answers&style=question&page=4

在我的分页课程中,我应该创建一个指向页面的链接,但页面上有不同的页码,但仍然保留了网址的其他部分?

4 个答案:

答案 0 :(得分:6)

您可以使用 http_build_query() 。它比手动删除旧参数更清晰。

应该可以传递一个由$ _GET和新值组成的合并数组,并获得一个干净的URL。

$new_data = array("currentpage" => "mypage.html");
$full_data = array_merge($_GET, $new_data);  // New data will overwrite old entry
$url = http_build_query($full_data);

答案 1 :(得分:5)

简而言之,您只需解析URL,然后在最后添加参数或替换它(如果已存在)。

$parts = parse_url($url) + array('query' => array());
parse_str($parts['query'], $query);
$query['page'] = $page;
$parts['query'] = http_build_str($query);
$newUrl = http_build_url($parts);

此示例代码需要PHP HTTP modulehttp_build_url http_build_str。后者可以替换为http_build_query,对于第一个,可以存在PHP用户空间实现,以防您没有安装模块。

另一种方法是使用Net_URL2包,它提供了各种URL操作的接口:

$op = new Net_URL2($url);
$op->setQueryVariable('page', $page);
$newUrl = (string) $op;

它更具灵活性和表现力。

答案 2 :(得分:4)

如果你想编写自己的函数来做类似http_build_query的事情,或者你需要根据某种原因自定义它的操作:

<?php 
function add_edit_gets($parameter, $value) { 
    $params = array(); 
    $output = "?"; 
    $firstRun = true; 
    foreach($_GET as $key=>$val) { 
        if($key != $parameter) { 
            if(!$firstRun) { 
                $output .= "&"; 
            } else { 
                $firstRun = false; 
            } 
            $output .= $key."=".urlencode($val); 
         } 
    } 

    if(!$firstRun) 
        $output .= "&"; 
    $output .= $parameter."=".urlencode($value); 
    return htmlentities($output); 
} 

?>

然后你可以写出你的链接:

<a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a>

答案 3 :(得分:0)

如何在会话中存储page参数,这样您就不必修改每个页面网址了?