ThinkPHP数据分页Page.class.php
获取分页类
ThinkPHP提供了数据分页的扩展类库Page,能够在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包括分页扩展类了。
把解压后的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(假设没有请手动创建)文件夹以下。
当然,扩展类库的位置事实上比較任意,你也能够放入项目的类库文件夹以下,差别仅仅是在于你导入路径的不同而已。
分页查询
分页类须要和查询相结合,我们能够使用ThinkPHP自带的limit方法或者page方法。目的就是为了获取当前分页的数据(也有先获取完整数据然后前端分页显示的方法,不在本文描写叙述内容中,也不建议)。使用limit方法或者page方法是和数据库类型无关的。
我们首先在数据库里面创建一个think_data数据表用于測试:
- CREATE TABLE IF NOT EXISTS `think_data` (
- `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar(255) NOT NULL,
- `content` varchar(255) NOT NULL,
- `create_time` int(11) unsigned NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
要使用分页查询,一般来说须要进行两次查询。即第一次查询得到满足条件的总数据量。然后第二次查询当前分页的数据,这样做的作用是告诉分页类当前的数据总数,以便计算生成的总页数(假设你的显示仅仅是须要上下翻页的话,事实上总数查询能够省略或者进行缓存)。
一个标准的分页使用示比例如以下:
- $Data = M('Data'); // 实例化Data数据对象
- import('ORG.Util.Page');// 导入分页类
- $count = $Data->where($map)->count();// 查询满足要求的总记录数 $map表示查询条件
- $Page = new Page($count);// 实例化分页类 传入总记录数
- $show = $Page->show();// 分页显示输出
- // 进行分页数据查询
- $list = $Data->where($map)->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
- $this->assign('list',$list);// 赋值数据集
- $this->assign('page',$show);// 赋值分页输出
- $this->display(); // 输出模板
假设没有不论什么数据的话,分页显示为空白。所以在进行測试之前,请确保你的数据表里面有一定的数据,否则可能看不到分页的效果。假设使用page方法查询的话,则能够改成
- $Data = M('Data'); // 实例化Data数据对象
- import('ORG.Util.Page');// 导入分页类
- $count = $Data->where($map)->count();// 查询满足要求的总记录数
- $Page = new Page($count);// 实例化分页类 传入总记录数
- // 进行分页数据查询 注意page方法的參数的前面部分是当前的页数使用 $_GET[p]获取
- $nowPage = isset($_GET['p'])?$_GET['p']:1;
- $list = $Data->where($map)->order('create_time')->page($nowPage.','.$Page->listRows)->select();
- $show = $Page->show();// 分页显示输出
- $this->assign('page',$show);// 赋值分页输出
- $this->assign('list',$list);// 赋值数据集
- $this->display(); // 输出模板
然后,我们在模板中加入分页输出变量就可以
- <table cellpadding=3 cellspacing=5>
- <volist name="list" id="vo">
- <tr>
- <td >[ {$vo.create_time|date='Y-m-d H:i:s',###} ] {$vo.title} </td>
- </tr>
- </volist>
- <tr>
- </tr>
- </table>
- <div class="result page">{$page}</div>
能够看到分页输出仅仅须要採用{$page}变量在模板中输出就可以。
分页设置
设置分页变量
默认情况下,分页传值的变量是p,生成的分页跳转地址可能类似于:
- http://serverName/index.php/Data/index/p/1
- http://serverName/index.php/Data/index/p/2
我们能够配置VAR_PAGE配置參数来改变:
- 'VAR_PAGE'=>'page'
则分页地址变成:
- http://serverName/index.php/Data/index/page/1
- http://serverName/index.php/Data/index/page/1
设置每页记录数
默认的情况下。分页显示每页会显示20条数据,假设你希望改变每页显示的数据量的话,实例化分页类的时候能够传人第二个參数就可以:
- $Page = new Page($count,5);// 实例化分页类 传入总记录数而且每页显示5条记录
因为查询方法中我们使用了$Page->listRows属性。所以无需更改,但假设你是直接在查询方法中使用数字请记得一起更改。
以下是官方的分页演示样例的显示效果:
传入分页条件
默认情况下,分页类会自己主动获取当前页面的POST(优先)或者GET变量作为分页跳转的传值,假设须要指定传入当前分页跳转的參数。就能够通过设置parameter属性,parameter属性支持2种方式传值:字符串和数组。字符串採用var1=val1&var2=val2...的格式。比如:
- foreach($map as $key=>$val) {
- $Page->parameter .= "$key=".urlencode($val).'&';
- }
或者直接传入数组:
- $Page->parameter = array_map('urlencode',$map);
因为内部调用了U函数,分页类终于生成的分页跳转链接会依据当前的URL设置自己主动生成和当前URL模式一致的地址。所以无需操心分页链接的參数影响URL地址。
分页路由支持
如果你的分页跳转链接地址採用了路由,那么能够通过设置url參数。比如,如果我们的分页URL地址格式是:
- http://serverName/data/index/1
- http://serverName/data/index/2
- http://serverName/data/index/3
这种URL路由地址,那么我们就能够设置
- $Page->url = 'data/index';
设置后,分页类的链接地址会自己主动生成上面的URL格式地址。
注意。url參数和parameter 同一时候使用的话。后者无效。
设置显示的页数
能够在实例化分页类之后。进行相关属性的设置。默认情况下。页面显示的页数是5。我们能够改动:
- $Page->rollPage = 3;
这样,页面上仅仅能同一时候看到3个分页
分页显示定制
上面讲的是分页的參数设置。以下讲下怎样对分页显示效果(包含样式)进行设置。
默认的分页效果可能不能满足全部的要求,分页类提供了一个setConfig方法来改动默认的一些设置。
比如:
- $page->setConfig('header','个会员');
setConfig方法支持的属性包含:
header | 头部描写叙述信息。默认值 “条记录” |
prev | 上一页描写叙述信息,默认值是“上一页” |
next | 下一页描写叙述信息。默认值是“下一页” |
first | 第一页描写叙述信息,默认值是“第一页” |
last | 最后一页描写叙述信息。默认值是“最后一页” |
theme | 分页主题描写叙述信息,包含了上面全部元素的组合 ,设置该属性能够改变分页的各个单元的显示位置。默认值是 "%totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%" |
通过setConfig设置以上属性能够完美的定制出你的分页显示风格。
ThinkPHP数据分页Page.class.php的更多相关文章
- thinkphp 数据分页
通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); ...
- js 从一个json拼接成另一个json,并做json数据分页table展示
先给数据: //原始json数据json = [{"id":"1","aid":"013","performa ...
- ThinkPHP快速实现数据分页(前端/后端分离)
数据 分页 可能是web 编程里最常用到的功能之一.thinkphp 实现分页功能十分简洁.只需要定义 几个参数 就能搞定.当然,扩展也是十分方便的. 让我们现在就开始thinkphp的分页实现吧. ...
- thinkphp自定义分页效果
TP自带了一个分页函数,挺方便使用的. 下面是我的使用方法: /*****************分页显示start*************************/ $arr_page=$this ...
- 数据分页 THINKPHP3.2 分页 三种分页方法
数据分页 复制本页链接 opensns 通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方 ...
- THINKPHP ajax分页示例
先把框架的page类改造一下 路径在ThinkPHP/Library/Think/Page.class.php文件 添加一个方法 ajax_show 代码如下 <?php /** * 组装分页链 ...
- ThinkPHP3.2.3学习笔记6---专题---数据分页
http://document.thinkphp.cn/manual_3_2.html#data_page thinkphp3.2.3中分类的功能调用的文件$THINKPHP_HOME/ThinkPH ...
- salesforce 零基础开发入门学习(八)数据分页简单制作
本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...
- ThinkPhp之分页
function page($count,$pagesize=3){ $Page=new \Think\Page($count,$pagesize); //每页显示记录数 $Page->setC ...
随机推荐
- An existing connection was forcibly closed by the remote host
StackOverflow https://stackoverflow.com/questions/5420656/unable-to-read-data-from-the-transport-con ...
- Connect to MongoDB
https://docs.mongodb.com/getting-started/csharp/client/ MongoDB C# Driver is the officially supporte ...
- nyoj--1009--So Easy[Ⅰ](数学)
So Easy[Ⅰ] 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给出任意一个三角形的三个边a,b,c. 要求:求出这个三角形的外接圆半径. 输入 输入数据有多组. ...
- 38.angular的scope作用域
转自:https://www.cnblogs.com/best/tag/Angular/ 1. Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. S ...
- [USACO14FEB]路障Roadblock
题目:洛谷P2176. 题目大意:有n个点m条无向边,一个人要从1走到n,他会走最短路.现在可以让一条边的长度翻倍,求翻倍后这个人要多走多少距离. 解题思路:首先可以知道,翻倍肯定是在最短路上的某条边 ...
- ECNUOJ 2142 放书
放书 Time Limit:1000MS Memory Limit:65536KBTotal Submit:409 Accepted:173 Description 你要把一叠书放进一些箱子里面,为 ...
- 洛谷 P1056 排座椅
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...
- MYSQL 更新时间自己主动同步与创建时间默认值共存问题
本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自己主动填充 ...
- [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose
This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...
- 基于express+redis高速实现实时在线用户数统计
作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样基于express+redis高速实现实时在线用户数统计. 1. 在github.com上创建项目uv-tj.将其同步到本地: ...