数据分页
数据分页概述
在询数据时,使用数据操作对象的 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(); } }