PHP动态URL的分页函数

SJY发表于:2018年06月03日 12:14 • 阅读:

<?php
/*
 * 本分页功能,近支持动态url
 * 伪静态的分页功能尚未发布
 */
function page($total, $display = 10) {
        global $offset, $pagenav;
        $GLOBALS["display"] = $display;

        $page = 0; //整型声明
        if (isset ($_GET['page']))$page = $_GET['page']; //当url存在page参数,则把page的值赋给变量$page
        $page = $page > 1 ? $page : 1; //只有获取到的分页大于1才赋值(避免有心人填写负值,导致SQL出现错误,SQL结构泄露),否则为0
        $offset = ($page -1) * $display; //起始偏移量,当url不存在page参数时,page默认为1,所以起始偏移量默认为0
        if ($total > $display) { //当信息总条数大于每页显示条数,才开始进行分页功能
                $url = $_SERVER["REQUEST_URI"];//获取访问此页面所需的 URI
                if ($_SERVER["QUERY_STRING"]) {//获取URL中的查询字符串,即问号'?'后面的内容
                        $url_query = preg_replace("/&?page=$page/", '', $_SERVER["QUERY_STRING"]); //把查询字符串中的,'&page=页数'或'page=页数' 替换为空
                        $url = str_replace($_SERVER["QUERY_STRING"], $url_query, $url);//在URI中,把查询字符串替换为做过替换的字符串,这样整个URI就不再有 page=页数
                        if ($url_query) {//如果把'page=页数'替换为空后,查询字符串仍然有值,那么要加参数,只能用'&'符号来连接
                                $url .= '&page=';
                        } else {//如果做过替换后,没有查询字符串了,意味着没有任何参数,所以不再需要'&'符号了
                                $url .= 'page=';
                        }
                } else {//如果原始的查询字符串不存在,那么就自己添加一个查询字符串'?page'
                        $url.= '?page=';
                }
                $previous = $page -1; //上一页页数
                if ($previous > 0) { //只有当上一页的页数大于0时才出现 上一页,因为页数不可能为负,最小也是1
                        $firsturl=preg_replace("/[?&]page=$page/",'',$_SERVER["REQUEST_URI"]);//把URI中的'?page=页数'或'&page=页数'替换为空,使其变成分页中的第一页
                        $previous = $previous == 1 ? $firsturl : $url . $previous; //如果上一页页数为1,则直接使用列表第一页的url,否则显示加page参数的url
                        $pagenav .= '<a href="' . $previous . '" ><span class="older"><span class="meta-nav">←</span>上一页</span></a>';
                }
                $next = $page +1; //下一页页数
                $last = ceil($total / $display); //最后页的页数
                if ($next <= $last) //只有当下一页的页数小于等于最后页的页数才显示下一页,试想,如果本页已经是最后页,就不存在下一页了
                        $pagenav .= '<a href="' . $url . $next . '" ><span class="newer">下一页<span class="meta-nav">→</span></span></a>';
        }
}
?>

 

欢迎转载,但请保留原文地址 http://www.sjyhome.com/php/1387.html

标签: 分页

回复(0)