数据分页

 数据分页概述

在询数据时,使用数据操作对象的 page() 函数即可快速完成分页;

分页函数

page($eachPage = 10, $totalRows = 0)

参数 :
1. $eachPage = 10 每页数据数量,可选参数,默认 10;
2. $totalRows = 0 查询数据总数,可选参数,默认 0 【系统自动查询总数】;
返回 :数据操作对象,与 fetchAll() 函数结合使用;

数据格式

使用 page() 函数与fetchAll() 函数结合查询数据格式如下 : 

$data = array(
    数据列表[ 数组形式 ], 分页对象[ 对象形式 ]
);

分页对象数据格式

分页对象->firstPage //第一页链接
分页对象->prePage //上一页链接
分页对象->listPage //列表页链接【数组格式】
分页对象->nextPage //下一页链接
分页对象->lastPage //最后一页链接
分页对象->skipPage //跳转页 dom 
分页对象->currentPage //当前页

带有分页样式的示例

控制器代码

<?php
class indexController extends grace{
    public function index(){
        // 在控制器内查询数据
        $db   = \db('students');
        $this->students  =  $db->page(2)->order('st_id desc')->fetchAll();
    }
}

视图文件代码

<?php if(!defined('PG_VERSION')){exit;}?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>welcome to phpGrace</title>
</head>
<body>
<style type="text/css">
    *{font-family: "微软雅黑"; color:#333;}
    a{text-decoration:none;}
    table {border-left:1px solid #F0F9FC; border-top:1px solid #F0F9FC;}
    td,th{border-right:1px solid #F0F9FC; border-bottom:1px solid #F0F9FC; padding:8px; text-align:center;}
    /* 分页样式 */
    .grace-pager{float:right;}
    .grace-pager a{display:block; background:#F5F5F5; padding:0px 10px; height:30px; line-height:30px; float:left; margin:3px; border-radius:2px;}
    .grace-pager a:hover{background:#2F4056; text-decoration:none; color:#FFF;}
    .grace-pager .grace-current{background:#5FB878 !important; color:#FFF !important;}
</style>
<div style="width:600px; padding:50px; margin:0 auto;">
    <table border="0" cellspacing="0" cellpadding="0" width="100%">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>age</th>
        </tr>
        <?php
        foreach($this->students[0] as $rows){
            ?>
            <tr>
                <td><?php echo $rows['st_id'];?></td>
                <td><?php echo $rows['st_name'];?></td>
                <td><?php echo $rows['st_age'];?></td>
            </tr>
        <?php }?>
    </table>
</div>
<div style="width:600px; padding:0 50px; margin:0 auto;">
    <div class="grace-pager">
        <a href="<?php echo $this->students[1]->firstPage;?>">首页</a>
        <a href="<?php echo $this->students[1]->prePage;?>">上一页</a>
        <?php
        foreach($this->students[1]->listPage as $k => $v){
            if($k == $this->students[1]->currentPage){
                echo '<a href="'.$v.'" class="grace-current">'.$k.'</a>';
            }else{
                echo '<a href="'.$v.'">'.$k.'</a>';
            }   
        }
        ?>
        <a href="<?php echo $this->students[1]->nextPage;?>">下一页</a>
        <a href="<?php echo $this->students[1]->lastPage;?>">尾页</a>
    </div>
</div>
</body>
</html>

数据总数说明

page()函数自动根据查询语句计算获取数据总数,有时候您的查询语句有可能是复杂的,那么您可以自己编写查询总数的代码获取总数并告知分页组件,以提升查询效率;

上面的例子可以修改为

<?php
class indexController extends grace{
    public function index(){
        $db   = \db('students');
        //手动查询总数,比如:利用第一url参数记录总数
        if(empty($_GET['total'])){
            $_GET['total'] = $db->count();
        }else{
            echo '使用 url 参数...';
        }
        $this->students  =  $db->page(2, $_GET['total'])->order('st_id desc')->fetchAll();
    }
}