【问题标题】:update url parameter in pagination更新分页中的url参数
【发布时间】:2017-01-09 17:21:13
【问题描述】:

我已经用 php 为我的网站实现了分页系统,唯一的问题是:
假设我的分页网址是www.abc.com/search.php?mode=study&query=a,目前每页显示20个结果,当我使用分页浏览结果时,网址更改为www.abc.com/search.php?mode=study&query=a&page=2www.abc.com/search.php?mode=study&query=a&page=2&page=3www.abc.com/search.php?mode=study&query=a&page=2&page=3&page=4,所以问题是我面临的是当我浏览结果时,每次页面变量都附加到 url,这真的很烦人。
我的分页代码是。

<?php
function displayPaginationBelow($per_page,$page,$total){

$page_url="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&";
$adjacents = "2";
$page = ($page == 0 ? 1 : $page); 
$start = ($page - 1) * $per_page;                              
$prev = $page - 1;                         
$next = $page + 1;
$setLastpage = ceil($total/$per_page);
$lpm1 = $setLastpage - 1;
$setPaginate = "";
if($setLastpage > 1)
{  
    $setPaginate .= "<ul class='setPaginate'>";
    $setPaginate .= "<li class='setPage'>Page $page of $setLastpage</li>";
    if ($setLastpage < 7 + ($adjacents * 2))
    {  
        for ($counter = 1; $counter <= $setLastpage; $counter++)
        {
            if ($counter == $page)
                $setPaginate.= "<li><a class='current_page'>$counter</a></li>";
            elseif (isset($_GET['page'])) {
                unset($_GET['page']);
                $page_url = http_build_query($_GET);
                echo $page_url;
                $setPaginate.= "<li><a href='{$page_url}page=$counter'>$counter</a></li>";
            }
            else
                $setPaginate.= "<li><a href='{$page_url}page=$counter'>$counter</a></li>";                 
        }
    }
    elseif($setLastpage > 5 + ($adjacents * 2))
    {
        if($page < 1 + ($adjacents * 2))    
        {
            for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
            {
                if ($counter == $page)
                    $setPaginate.= "<li><a class='current_page'>$counter</a></li>";
                else
                    $setPaginate.= "<li><a href='{$page_url}page=$counter'>$counter</a></li>";                 
            }
            $setPaginate.= "<li class='dot'>...</li>";
            $setPaginate.= "<li><a href='{$page_url}page=$lpm1'>$lpm1</a></li>";
            $setPaginate.= "<li><a href='{$page_url}page=$setLastpage'>$setLastpage</a></li>";     
        }
        elseif($setLastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
        {
            $setPaginate.= "<li><a href='{$page_url}page=1'>1</a></li>";
            $setPaginate.= "<li><a href='{$page_url}page=2'>2</a></li>";
            $setPaginate.= "<li class='dot'>...</li>";
            for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
            {
                if ($counter == $page)
                    $setPaginate.= "<li><a class='current_page'>$counter</a></li>";
                else
                    $setPaginate.= "<li><a href='{$page_url}page=$counter'>$counter</a></li>";                 
            }
            $setPaginate.= "<li class='dot'>..</li>";
            $setPaginate.= "<li><a href='{$page_url}page=$lpm1'>$lpm1</a></li>";
            $setPaginate.= "<li><a href='{$page_url}page=$setLastpage'>$setLastpage</a></li>";     
        }
        else
        {
            $setPaginate.= "<li><a href='{$page_url}page=1'>1</a></li>";
            $setPaginate.= "<li><a href='{$page_url}page=2'>2</a></li>";
            $setPaginate.= "<li class='dot'>..</li>";
            for ($counter = $setLastpage - (2 + ($adjacents * 2)); $counter <= $setLastpage; $counter++)
            {
                if ($counter == $page)
                    $setPaginate.= "<li><a class='current_page'>$counter</a></li>";
                else
                    $setPaginate.= "<li><a href='{$page_url}page=$counter'>$counter</a></li>";                 
            }
        }
    }
    if ($page < $counter - 1){
        $setPaginate.= "<li><a href='{$page_url}page=$next'>Next</a></li>";
        $setPaginate.= "<li><a href='{$page_url}page=$setLastpage'>Last</a></li>";
    }else{
        $setPaginate.= "<li><a class='current_page'>Next</a></li>";
        $setPaginate.= "<li><a class='current_page'>Last</a></li>";
    }
    $setPaginate.= "</ul>\n";    
}
return $setPaginate;
}

我知道问题出在$page_url 变量上,需要帮助解决这个小问题

【问题讨论】:

    标签: php pagination


    【解决方案1】:
    $page_url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //Create the url
    $page_url = preg_replace("/(page\=[0-9]+[\&]*)/", "", $page_url); // Delete page query string.
    if($page_url[strlen($page_url) - 1 ] !== "&"){ // If last char is not &
        $page_url .= "&"; // add &
    }
    

    【讨论】:

    • 完美,这就是我所需要的,现在就像一个魅力。谢谢@Erol KESKIN
    【解决方案2】:

    在添加新页面参数之前,您需要去掉旧页面参数。所以通过unset()删除参数

    this answer 中显示了一种方法。

    【讨论】:

    • 我试过isset($_GET['page'])) { unset($_GET['page']); $page_url = http_build_query($_GET); echo $page_url;,但它不起作用
    • 您需要将 url 解析为数组并在取消设置之前提取查询部分。但是 preg_replace Erol KESKİN 建议也可以。
    猜你喜欢
    • 2015-02-15
    • 2020-07-26
    • 2013-04-10
    • 1970-01-01
    • 2020-07-30
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多