PHP 分页:如何创建分页链接


PHP Pagination: How to create a paging link?

所以我正在学习本教程。 PHP_SELF在我的情况下不起作用,因为我在搜索结果页面中使用分页,并且 url 本身具有变量查询字符串。 REQUEST_URI不起作用,因为每次它都会附加最后一个 url

 <?
        if(!isset($_GET['page'])) {
            $base_url = $_SERVER['REQUEST_URI'];
        }
        if( $page > 0 ) {
            $last = $page - 2;
            echo "<a href = '"{$_SERVER['REQUEST_URI']}?page = $last'">Last 10 Records</a> |";
            echo "<a href = '"{$_SERVER['REQUEST_URI']}?page = $page'">Next 10 Records</a>";
        }else if( $page == 0 ) {
            echo "<a href = '"{$_SERVER['REQUEST_URI']}?page = $page'">Next 10 Records</a>";
        }else if( $left_rec < $rec_limit ) {
            $last = $page - 2;
            echo "<a href = '"{$_SERVER['REQUEST_URI']}?page = $last'">Last 10 Records</a>";
        }
        ?>

我的网址生成为:

search.php?mode=keyword&keyword=&importer_name=&consignor_name=&description=&bl_date=&categories%5B%5D=0

字段是动态的。

对于搜索结果,我曾经创建过以下代码:

  <?    
        $pager = array(
/*here is some params from MySQL and $_GET*/
'current'=0, // current page num from $_GET
'total' = 200, // Total pages counted based on MySQL query results
);
        $params = $_GET; // do not forget to cleanup and validate GET before using it!
        $page = $_SERVER['REQUEST_URI']; // in my case here is URL generated
        $page = trim(str_replace('//', '/', $page), '/'); // just to be shure
        // Do we need PREV page button?  
        if ($pager['current'] != 0) {
            if (($pager['current'] - 1) == 0) {
                unset($params['page']);
            } else {
                $params['page'] = $pager['current'] - 1;
            }
            $url = trim($page . '?' . http_build_query($params), '?');
            $pervpage = '<li class="previous"><a href="' . $url . '">&lt;</a></li>';
        }
        // Do we need NEXT page button?  
        if ($pager['current'] != ($pager['total'] - 1)) {
            $params['page'] = $pager['current'] + 1;
            $url = trim($page . '?' . http_build_query($params), '?');
            $nextpage = '<li class="next"><a href="' . $url . '">&gt;</a></li>';
        }
        // Lets create 2 buttins fo pages before current and 2 buttons for pages after current
        $start = $pager['current'] - 2 >= 0 ? $pager['current'] - 2 : 0;
        $end = $pager['current'] + 3 <= $pager['total'] ? $pager['current'] + 3 : $pager['total'];
        if ($end - $start <= 4) {
            if ($end == $pager['total']) {
                $start = $pager['total'] - 5 >= 0 ? $pager['total'] - 5 : 0;
            }
            if ($start == 0) {
                $end = $pager['total'] >= 5 ? 5 : $pager['total'];
            }
        }
        $pager['pages'] = $pervpage;
        for ($i = $start; $i < $end; $i++) {
            if ($i == $pager['current']) {
                $pager['pages'] .= '<li><span>' . ($i + 1) . '</span></li>';
            } else {
                if ($i == 0) {
                    unset($params['page']);
                } else {
                    $params['page'] = $i;
                }
                $url = trim($page . '?' . http_build_query($params), '?');
                $pager['pages'] .= '<li><a href="' . $url . '" >' . ($i + 1 == 0 ? "" : $i + 1) . '</a> </li>';
            }
        }
        $pager['pages'] .= $nextpage;
        // And we almost ready to output results
        $pager['pages'] = str_replace('?&', '?', $pager['pages']);
        // Now we can output results
        echo $pager['pages'];
    ?>

我认为它可能会被优化。但就目前而言,它做得很好

如果

查询字符串是动态生成的,使用 $_SERVER['QUERY_STRING'] 可能会解决您的问题......以下代码我帮助您的问题

if(isset($_SERVER['QUERY_STRING'])) {
$query_string = $_SERVER['QUERY_STRING'];
}else{
$query_string = "";
}
echo "<a href = '"{$_SERVER['REQUEST_URI']}?".$query_string."&page = $last'">Last 10 Records</a> |";
  • $_SERVER['REQUEST_URI'] 包含整个 URI,包括查询 ($_GET 参数)。
  • 每次发出请求时都会添加新参数。
  • 因此,请尝试提取脚本 URI(请参阅下面的示例)。

    <?php
        // Display what we have got on input
        echo "<h3>'$_GET parameters received:</h3>";
        if (count($_GET)<1) {
            echo "NONE<br />";
        } else foreach ($_GET as $k=>$v) {
            echo "'$_GET[$k]=$v<br />";
        }
        echo "<h3>Link created:</h3>";
        // Get URI elements and create script URI
        $prot = ((isset($_SERVER['HTTPS'])) && (strtoupper($_SERVER['HTTPS']) == 'ON')) ? 'https' : 'http';
        $script_url  = $prot . '://' . getenv('SERVER_NAME') . ':' . getenv('SERVER_PORT') . $_SERVER['PHP_SELF'];
        // Collect parameters
        $query = '';
        $pagenum = (isset($_GET['page'])) ? $_GET['page'] : -1;
        foreach ($_GET as $k=>$v) {
            if (strtolower($k)=='page') continue; // skip 'page' parameter
            $query .= "&$k=$v";
        }
        // Create link
        $pagenum++;
        $link = $script_url . '?page=' . $pagenum . $query ;
        echo "'$link=$link<br />";
        echo "<a href='"$link'">link</a><br />";
    ?>