我正在为网络开发一个搜索功能,直到现在看起来像一个魅力,但我有一个问题的分页。我有以下网址格式:
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">« Previous</li>';
}else{
$paginado .= '<li class="previous"><a href="'.getUrl().'&page='.$prevpage.'">« 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 »</a></li>';
}else{
$paginado .= '<li class="next-off">Next »</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;
}
提前致谢
答案 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