分页问题导致PHP

时间:2014-09-29 15:52:07

标签: php pagination

我正在为网络开发一个搜索功能,直到现在看起来像一个魅力,但我有一个问题的分页。我有以下网址格式:

https://www.server.com/search?w=something&re=34&page=1

我需要专门更改URL中的页码,我有一个功能可以检索完整的URL,但没有用,因为当我点击页码时它会这样做:

https://www.server.com/search?w=something&re=34&page=1&page=2&page=3

我需要专门更换页面=我想要的数字。我怎样才能做到这一点?

该功能的完整代码是:

function PAGINAR($page,$totalPages){
        global $link;

        $nextpage= $page + 1;
        $prevpage= $page - 1;

        $paginado = '<ul id="pagination-digg">';

        if ($page == 1){
            $paginado .= '<li class="previous-off">&laquo; Previous</li>';
        }else{
            $paginado .= '<li class="previous"><a href="'.getUrl().'&page='.$prevpage.'">&laquo; Previous</a></li>';
        }

        for($i = max(1, $page - 5); $i <= min($page + 5, $totalPages); $i++){
            if ($page == $i){
                $paginado .= '<li class="active">'.$i.'</li>';
            }else{
                $paginado .= '<li><a href="'.getUrl().'&page='.$i.'">'.$i.'</a></li>';
            }
        }

        if($totalPages > $page ){      
               $paginado .= '<li class="next"><a href="'.getUrl().'&page='.$nextpage.'">Next &raquo;</a></li>';
            }else{
                $paginado .= '<li class="next-off">Next &raquo;</li>';
            }

        $paginado .= '</ul>';

        return $paginado;
    }

这会检索网址

function getUrl() {
  $url  = @( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] :  'https://'.$_SERVER["SERVER_NAME"];
  $url .= $_SERVER["REQUEST_URI"];
  return $url;
}

提前致谢

2 个答案:

答案 0 :(得分:1)

这是一个很好的例子,说明为什么你不希望你的后端指示你的前端。理想情况下,您应该只返回包含当前页码的结果集,并让前端生成第一页和最后一页链接。

但是由于你这样做,问题是REQUEST_URI已经包含了变量页面。所以你有两个选择:

<强> 1。解析REQUEST_URI以获取页面参数或用您想要的数字替换页面编号

preg_replace('/page=\d+/', 'page=' . $nextPage, $_SERVER['REQUEST_URI'])

<强> 2。解析脚本变量('?'之后的所有内容)并从$ _GET重新附加所需的变量

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

$varArray = $_GET;
unset($varArray['page']);
$url = $baseUrl . '?' . implode('&', $varArray);

如果这看起来像hacky,那是因为它。使用JSON并让前端处理设置前端。

答案 1 :(得分:1)

以下是一个可能对您有所帮助的示例:

$url = 'https://www.server.com/search?w=something&re=34&page=1';

parse_str( parse_url( $url, PHP_URL_QUERY ), $params );
$params['page'] = 2;

echo http_build_query( $params );   // outputs: w=something&re=34&page=2

parse_url
parse_str
http_build_query