PHP 分页代码

作者: JONE 分类: PHP/MySQL 发布时间: 2017-08-06 19:29
<?php
/*
*分页函数
*total 总条数
*pageSize 每页显示的条数
*size 页码范围
*pixUrl url额外参数
*
* 
*/

function page($total,$pageSize=3,$size=3,$pixUrl=""){

    //获取当前页数据
    $page=isset($_GET['page'])?$_GET['page']:1;

    //总页数
    $pageNum=ceil($total/$pageSize);

    //求偏移量
    $offset=floor($size/2);

    //首页尾页
    $startPage=$page-$offset;
    $endPage=$page+$offset;

    //控制分页范围的核心代码
    if($startPage<=0){

        $endPage=$page+$offset+abs($startPage)+1;
    }

    //上一页和下一页
    $prePage=max(1,$page-1);//上一页
    $nextPage=min($page+1,$pageNum);//下一页

    //界限判断
    
    if($endPage>$pageNum){

        $endPage=$pageNum;
        $startPage=$pageNum-2*$offset;
    }
    if($startPage<=0){
        $startPage=1;
    }

    //分页字符串拼接
    $pageSt="";
    if($page>1){

        $pageSt.="<a href='?page=1&$pixUrl'>首页</a>";
    }

    //上一页
    $pageSt.="<a href='?page=$prePage&$pixUrl'>上一页</a>";
    //中间列表页
    for($i=$startPage;$i<=$endPage;$i++){

        if($i==$page){

            $pageSt.="<a href='?page=$i&$pixUrl'><font color='red'>$i</font></a>";
            continue;
        }
        $pageSt.="<a href='?page=$i&$pixUrl'>$i</a>";

    }

    //下一页
    $pageSt.="<a href='?page=$nextPage&$pixUrl'>下一页</a>";

    if($page<$pageNum){

        $pageSt.="<a href='?page=$pageNum&$pixUrl'>尾页</a>";
    }

    //拼接limit参数
    //
    $limitStart=($page-1)*$pageSize;

    $limit="limit $limitStart,$pageSize";

    $data=array('limit'=>$limit,'pageStr'=>$pageSt);
    return $data;
}


 分页原理梳理

1.1   当前页接收

515-1

1.2   偏移量和总页数计算

515-2

1.3   分页小车核心代码

这样做的目的是为了保证,整体页码范围为我们设定的值。

 515-3

1.4   上一页与下一页的判断

$prePage=max(1,$page-1);//上一页
$nextPage=min($page+1,$pageNum);//下一页

 

1.5   界限判断

 if($endPage>$pageNum){
       $endPage=$pageNum;
       $startPage=$pageNum-2*$offset;
    }
    if($startPage<=0){
       $startPage=1;
    }

515-4

1.6   中间列表展示

for($i=$startPage;$i<=$endPage;$i++){
if($i==$page){
$pageSt.="<a href='?page=$i&$pixUrl'><font color='red'>$i</font></a>";
continue;
}
$pageSt.="<a href='?page=$i&$pixUrl'>$i</a>";
}

1.7   Limit偏移量计算

$limitStart=($page-1)*$pageSize;

1.8   与回复帖子列表结合

515-5

发表评论

电子邮件地址不会被公开。 必填项已用*标注