phpGrace 数据分页详解查询数据时使用数据操作对象的 page 函数即可快速完成分页,使用page函数,查询数据的格式如下:

    1. $data = array(
    2. 数据列表,
    3. 分页对象
    4. );

    分页对象结构

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

    完整的演示示例1.jpg如在 index_index.php 视图文件内展示数据:演示数据表

    1. CREATE TABLE `accounts` (
    2. `id` int(10) NOT NULL AUTO_INCREMENT,
    3. `name` varchar(20) DEFAULT NULL,
    4. `balance` int(10) DEFAULT NULL,
    5. PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8;

    创建一些数据用于演示

    1. <?php
    2. class indexController extends grace{
    3. public function addData(){
    4. $db = db('accounts');
    5. for($i = 1; $i < 100; $i++){
    6. $data = array(
    7. 'name' => uniqid(),
    8. 'balance' => mt_rand(111,999)
    9. );
    10. $db->add($data);
    11. }
    12. }
    13. }

    您可以编写分页样式来制作漂亮的分页!

    1. <?php if(!defined('PG_VERSION')){exit;}?>
    2. <!DOCTYPE html>
    3. <html>
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>welcome to phpGrace</title>
    7. </head>
    8. <body>
    9. <style type="text/css">
    10. *{font-family: "微软雅黑"; color:#333;}
    11. a{text-decoration:none;}
    12. table {border-left:1px solid #F0F9FC; border-top:1px solid #F0F9FC;}
    13. td,th{border-right:1px solid #F0F9FC; border-bottom:1px solid #F0F9FC; padding:8px; text-align:center;}
    14. /* 分页样式 */
    15. .grace-pager{float:right;}
    16. .grace-pager a{display:block; background:#F5F5F5; padding:0px 10px; height:30px; line-height:30px; float:left; margin:3px; border-radius:2px;}
    17. .grace-pager a:hover{background:#2F4056; text-decoration:none; color:#FFF;}
    18. .grace-pager .grace-current{background:#5FB878 !important; color:#FFF !important;}
    19. </style>
    20. <div style="width:600px; padding:50px; margin:0 auto;">
    21. <table border="0" cellspacing="0" cellpadding="0" width="100%">
    22. <tr>
    23. <th>ID</th>
    24. <th>Name</th>
    25. <th>Balance</th>
    26. </tr>
    27. <?php
    28. $db = db('accounts');
    29. $data = $db->order('id desc')->page(10)->fetchAll();
    30. foreach($data[0] as $rows){
    31. ?>
    32. <tr>
    33. <td><?php echo $rows['id'];?></td>
    34. <td><?php echo $rows['name'];?></td>
    35. <td><?php echo $rows['balance'];?></td>
    36. </tr>
    37. <?php }?>
    38. </table>
    39. </div>
    40. <div style="width:600px; padding:0 50px; margin:0 auto;">
    41. <div class="grace-pager">
    42. <a href="<?php echo $data[1]->firstPage;?>">首页</a>
    43. <a href="<?php echo $data[1]->prePage;?>">上一页</a>
    44. <?php
    45. foreach($data[1]->listPage as $k => $v){
    46. if($k == $data[1]->currentPage){
    47. echo '<a href="'.$v.'" class="grace-current">'.$k.'</a>';
    48. }else{
    49. echo '<a href="'.$v.'">'.$k.'</a>';
    50. }
    51. }
    52. ?>
    53. <a href="<?php echo $data[1]->nextPage;?>">下一页</a>
    54. <a href="<?php echo $data[1]->lastPage;?>">尾页</a>
    55. </div>
    56. </div>
    57. </body>
    58. </html>

    关于数据总数说明phpgrace 内置的分页组件会自动根据查询语句计算获取数据总数,有时候您的查询语句有可能是复杂的(相对总数查询),那么您可以自己编写查询总数的代码获取总数并告知分页组件:

    1. $数据操作对象->page(每页展示数, 总数)->.....

    上面的例子可以修改为

    1. <?php
    2. $db = db('accounts');
    3. //手动查询总数,比如:利用第一url参数记录总数
    4. if(empty($_GET['total'])){
    5. $_GET['total'] = $db->count();
    6. }else{
    7. echo '使用 url 参数...';
    8. }
    9. $data = $db->order('id desc')->page(10, $_GET['total'])->fetchAll();
    10. foreach($data[0] as $rows){
    11. ?>
    12. <tr>
    13. <td><?php echo $rows['id'];?></td>
    14. <td><?php echo $rows['name'];?></td>
    15. <td><?php echo $rows['balance'];?></td>
    16. </tr>
    17. <?php }?>

    原文: http://www.phpgrace.com/doc/info/349-2.html