一个简单的PHP分页类

PHP分页类代码:

<?php
/**
 * Created by PhpStorm.
 * User: hongqiang
 * Date: 2017/1/5
 * Time: 9:38
 *
 *   1. 总数
 *   2. 每页显示多少条
 *
 *
 */

//分页类
class Page{
    private $total;   //总记录数
    private $nums;    //每页显示的条数
    private $pages;   //总页数
    private $cpage;   //当前页
    private $url;     //当前url

    public function __construct($total, $nums)
    {
        $this->total = $total;
        $this->nums = $nums;
        $this->pages = $this->getPages();
        $this->url = $this->setUrl();


        //获取当前页
        $this->cpage = !empty($_GET['page']) ? $_GET['page'] : $this->pages;
    }

    //获取URL
    private function setUrl(){
        $url = $_SERVER['REQUEST_URI'];    //获取当前url带参数的

        //判断是都有问号,有?说明有参数
        if (strstr($url, "?")){
            //使用parse_url函数将URL分成path和query两个部分
            $arr = parse_url($url);

            //如果有query下标在,说明有参数
            if (isset($arr['query'])){
                //使用parse_str函数将参数$page=5$page=6变成$output['page']=5  $output['page']=6
                parse_str($arr['query'], $output);
            }

            //删去数组中的下标是page的
            unset($output['page']);
            //再使用http_build_query将关联数组变成参数字符串
            $url = $arr['path'].'?'.http_build_query($output);
        }else{
            $url .= "?";
        }
        return $url;
    }

    //获取页数
    private function getPages(){
        return ceil($this->total/$this->nums);    //ceil函数为进1取整  ceil(3.1)=4
    }

    private function first(){
        //如果当前页是第一页,则不显示这些
        if ($this->cpage > 1){
            $prev = $this->cpage - 1;

            return '<a href="'.$this->url.'&page=1">首页</a>  <a href="'.$this->url.'&page='.$prev.'">上一页</a>';
        }else{
            return "";
        }
    }

    private function flist(){
        $list = "";
        $num = 4;
        //当前页之前的列表
        for ($i=$num; $i>=1; $i--){
            $page = $this->cpage - $i;

            if ($page >= 1){
                $list .= '&nbsp;<a href="'.$this->url.'&page='.$page.'">'.$page.'</a>&nbsp;';
            }else{
                continue;
            }
        }
        //当前页
        $list .= '&nbsp;';
        $list .= $this->cpage;
        $list .= '&nbsp;';
        //当前页之后的列表
        for ($i=1; $i<=$num; $i++){
            $page = $this->cpage + $i;
            //如果在页数之内的显示
            if ($page <= $this->pages){
                $list .= '&nbsp;<a href="'.$this->url.'&page='.$page.'">'.$page.'</a>&nbsp;';
            }else {
                break;
            }
        }

        return $list;
    }

    private function last(){
        if ($this->cpage < $this->pages){
            $next = $this->cpage + 1;

            return '<a href="'.$this->url.'&page='.$next.'">下一页</a>  <a href="'.$this->url.'&page='.$this->pages.'">末页</a>';
        }else{
            return "";
        }

    }

    //从多少条开始
    public function start(){
        return ($this->cpage - 1)*$this->nums + 1;
    }

    //从多少条结束
    private function end(){
        return min($this->cpage*$this->nums, $this->total);
    }

    //当前页显示的记录数
    private function currnum(){
        return $this->end()-$this->start()+1;
    }

    //调用这条方法就可以使用分页
    function fpage(){
        $arr = func_get_args();  //获取所有的参数

        $fpage="";

        $list[0] = "&nbsp;总{$this->total}条记录&nbsp;";
        $list[1] = "&nbsp;本页显示".$this->currnum()."条记录&nbsp;";
        $list[2] = "&nbsp;从".$this->start()."-".$this->end()."条&nbsp;";
        $list[3] = "&nbsp;{$this->cpage}/{$this->pages}&nbsp;";
        $list[4] = "&nbsp;".$this->first()."&nbsp;";
        $list[5] = "&nbsp;".$this->flist()."&nbsp;";
        $list[6] = "&nbsp;".$this->last()."&nbsp;";

        if (count($arr) < 1){
            $arr = array(0, 1, 2, 3, 4, 5, 6);
        }

        foreach ($arr as $n){
            $fpage .= $list[$n];
        }

        return $fpage;
    }
}



?>

应用实例:

<?php
/**
 * Created by PhpStorm.
 * User: hongqiang
 * Date: 2017/1/5
 * Time: 9:37
 */
header("content-type:text/html; charset=utf-8");

session_start();
include ("connect_db.php");
include ("page.class.php");

if ($_SESSION['permission'] == null){
    header("Location::error.html");
    exit;
}


//链接数据库
$conn = db_connect();

$sql = "select count(*) as total from upfiles";
$result = $conn -> query($sql);
$data = mysqli_fetch_array($result);

//创建分页对象
$page = new Page($data['total'], 10);


//执行sql
$sql = "select file_id, file_name, file_path, file_owner, file_time, file_classification, file_discription, file_size
        from upfiles ORDER BY file_id limit {$page->start()},10";

$result = $conn -> query($sql);
?>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title></title>
</head>
<body>
<div align="center">
    <br />
    <div>
        <br />
        <font face="Georgia, Times New Roman, Times, serif" size="4" color="#A4B8F2"> You are here: Fetal ECG Data </font>
    </div>
    <br />
    <hr width="50%" id="hr_home"/>
    <br /><br />
<table border="2" width="80%" align="center" cellspacing="2px" cellpadding="2px">

    <tr>
        <th id="form1_D">ID</th>
        <th id="form1_D">NAME</th>
        <th id="form1_D">PATH</th>
        <th id="form1_D">OWNER</th>
        <th id="form1_D">TIME</th>
        <th id="form1_D">CATEGORY</th>
        <th id="form1_D">DISCRIPTION</th>
        <th id="form1_D">SIZE</th>
    </tr>
<?php
while($row = mysqli_fetch_array($result, MYSQLI_NUM)){
    ?>
    <tr>
        <td id="form2_1"><?php echo $row[0]; ?></td>
        <td id="form2_1"><a href='detail.php?id=<?php echo $row[0]; ?>'><?php echo $row[1]; ?></a></td>
        <td id="form2_1"><?php echo $row[2]; ?></td>
        <td id="form2_1"><?php echo $row[3]; ?></td>
        <td id="form2_1"><?php echo $row[4]; ?></td>
        <td id="form2_1"><?php echo $row[5]; ?></td>
        <td id="form2_1"><?php echo $row[6]; ?></td>
        <td id="form2_1"><?php echo $row[7]; ?></td>
    </tr>
<?php
}
?>

<tr><td colspan="8" align="right" id="form2_1"><?php echo $page->fpage(); ?></td></tr>
</table>
    </div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值