**FrPHP 数据分页详解**
查询数据时使用数据操作对象的 page 函数即可快速完成分页,使用page函数,查询数据的格式如下:
~~~
$data = array(
数据列表,
分页对象
);
~~~
**分页对象结构**
~~~
分页对象->firstPage //第一页链接
分页对象->prePage //上一页链接
分页对象->listPage //列表页链接【数组格式】
分页对象->nextPage //下一页链接
分页对象->lastPage //最后一页链接
分页对象->skipPage //跳转页dom
分页对象->currentPage //当前页
~~~
**完整的演示示例
**图片占位符**
如在 index\_index.php 视图文件内展示数据:
**演示数据表**
~~~
CREATE TABLE `accounts` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`balance` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8;
~~~
**创建一些数据用于演示**
~~~
<?php
class indexController extends FrBase{
public function addData(){
$db = db('accounts');
for($i = 1; $i < 100; $i++){
$data = array(
'name' => uniqid(),
'balance' => mt_rand(111,999)
);
$db->add($data);
}
}
}
~~~
**
您可以编写分页样式来制作漂亮的分页!**
~~~
<?php if(!defined('FR_VERSION')){exit;}?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>welcome to frphp</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;}
/* 分页样式 */
.frphp-pager{float:right;}
.frphp-pager a{display:block; background:#F5F5F5; padding:0px 10px; height:30px; line-height:30px; float:left; margin:3px; border-radius:2px;}
.frphp-pager a:hover{background:#2F4056; text-decoration:none; color:#FFF;}
.frphp-pager .frphp-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>Balance</th>
</tr>
<?php
$db = db('accounts');
$data = $db->order('id desc')->page(10)->fetchAll();
foreach($data[0] as $rows){
?>
<tr>
<td><?php echo $rows['id'];?></td>
<td><?php echo $rows['name'];?></td>
<td><?php echo $rows['balance'];?></td>
</tr>
<?php }?>
</table>
</div>
<div style="width:600px; padding:0 50px; margin:0 auto;">
<div class="frphp-pager">
<a href="<?php echo $data[1]->firstPage;?>">首页</a>
<a href="<?php echo $data[1]->prePage;?>">上一页</a>
<?php
foreach($data[1]->listPage as $k => $v){
if($k == $data[1]->currentPage){
echo '<a href="'.$v.'" class="frphp-current">'.$k.'</a>';
}else{
echo '<a href="'.$v.'">'.$k.'</a>';
}
}
?>
<a href="<?php echo $data[1]->nextPage;?>">下一页</a>
<a href="<?php echo $data[1]->lastPage;?>">尾页</a>
</div>
</div>
</body>
</html>
~~~
**关于数据总数说明**
phpgrace 内置的分页组件会自动根据查询语句计算获取数据总数,有时候您的查询语句有可能是复杂的(相对总数查询),那么您可以自己编写查询总数的代码获取总数并告知分页组件:
~~~
$数据操作对象->page(每页展示数, 总数)->.....
~~~
**
上面的例子可以修改为**
~~~
<?php
$db = db('accounts');
//手动查询总数,比如:利用第一url参数记录总数
if(empty($_GET['total'])){
$_GET['total'] = $db->count();
}else{
echo '使用 url 参数...';
}
$data = $db->order('id desc')->page(10, $_GET['total'])->fetchAll();
foreach($data[0] as $rows){
?>
<tr>
<td><?php echo $rows['id'];?></td>
<td><?php echo $rows['name'];?></td>
<td><?php echo $rows['balance'];?></td>
</tr>
<?php }?>
~~~
- 第一章:快速开始
- 1.1 简介和条款
- 1.2 环境和伪静态
- 1.3 目录结构及命名
- 1.4 初始化、原理、分组
- 1.5 兼容7.2php
- 第二章 控制器和路由
- 2.1 创建控制器
- 2.2 基础控制器
- 2.3 URL解析
- 2.4 自定义路由
- 2.5 URL路由生成
- 第三章 数据和模型
- 3.1 数据库的配置
- 3.2 获取数据库对象
- 3.3 数据库操作
- 3.4 数据分页详情
- 3.5 事务操作&处理
- 3.6 数据验证
- 3.7 表单验证
- 3.8 全局模型创建与调用
- 第四章 视图
- 4.1 视图文件的创建
- 4.2 视图调用及引用
- 4.3 视图文件路径模式
- 第五章 会话机制
- 5.1 cookie 操作
- 5.2 文件型 SEssion
- 5.3 session[memcache]
- 5.4 session[redis]
- 第六章 缓存机制
- 6.1 缓存的简介和配置
- 6.2 文件型缓存
- 6.3 memcache 形式的缓存
- 6.4 redis 形式的缓存
- 第七章 配置 常量 语言
- 7.1 全局配置&分组配置
- 7.2 预定义常量
- 7.3 语言包使用说明
- 第八章 工具扩展
- 8.1 函数小工具
- 8.2 工具类函数
- 第九章 安全配置扩展
- 9.1 框架安全部署
- 9.2 常规安全配置
- 9.3 如何去扩展
- 附录:扩展工具类
- 一 、图片处理类
- 二、文件上传类
- 三、IP地址获取类