获取分页类

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数据表用于測试:

  1. CREATE TABLE IF NOT EXISTS `think_data` (
  2. `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
  3. `title` varchar(255) NOT NULL,
  4. `content` varchar(255) NOT NULL,
  5. `create_time` int(11) unsigned NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

复制代码

要使用分页查询,一般来说须要进行两次查询。即第一次查询得到满足条件的总数据量。然后第二次查询当前分页的数据,这样做的作用是告诉分页类当前的数据总数,以便计算生成的总页数(假设你的显示仅仅是须要上下翻页的话,事实上总数查询能够省略或者进行缓存)。

一个标准的分页使用示比例如以下:

  1. $Data = M('Data'); // 实例化Data数据对象
  2. import('ORG.Util.Page');// 导入分页类
  3. $count = $Data->where($map)->count();// 查询满足要求的总记录数 $map表示查询条件
  4. $Page = new Page($count);// 实例化分页类 传入总记录数
  5. $show = $Page->show();// 分页显示输出
  6. // 进行分页数据查询
  7. $list = $Data->where($map)->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
  8. $this->assign('list',$list);// 赋值数据集
  9. $this->assign('page',$show);// 赋值分页输出
  10. $this->display(); // 输出模板

复制代码

假设没有不论什么数据的话,分页显示为空白。所以在进行測试之前,请确保你的数据表里面有一定的数据,否则可能看不到分页的效果。假设使用page方法查询的话,则能够改成

  1. $Data = M('Data'); // 实例化Data数据对象
  2. import('ORG.Util.Page');// 导入分页类
  3. $count = $Data->where($map)->count();// 查询满足要求的总记录数
  4. $Page = new Page($count);// 实例化分页类 传入总记录数
  5. // 进行分页数据查询 注意page方法的參数的前面部分是当前的页数使用 $_GET[p]获取
  6. $nowPage = isset($_GET['p'])?$_GET['p']:1;
  7. $list = $Data->where($map)->order('create_time')->page($nowPage.','.$Page->listRows)->select();
  8. $show = $Page->show();// 分页显示输出
  9. $this->assign('page',$show);// 赋值分页输出
  10. $this->assign('list',$list);// 赋值数据集
  11. $this->display(); // 输出模板

复制代码

然后,我们在模板中加入分页输出变量就可以

  1. <table cellpadding=3 cellspacing=5>
  2. <volist name="list" id="vo">
  3. <tr>
  4. <td >[ {$vo.create_time|date='Y-m-d H:i:s',###} ] {$vo.title} </td>
  5. </tr>
  6. </volist>
  7. <tr>
  8. </tr>
  9. </table>
  10. <div class="result page">{$page}</div>

复制代码

能够看到分页输出仅仅须要採用{$page}变量在模板中输出就可以。

分页设置

设置分页变量

默认情况下,分页传值的变量是p,生成的分页跳转地址可能类似于:

  1. http://serverName/index.php/Data/index/p/1
  2. http://serverName/index.php/Data/index/p/2
复制代码

我们能够配置VAR_PAGE配置參数来改变:

  1. 'VAR_PAGE'=>'page'
复制代码

则分页地址变成:

  1. http://serverName/index.php/Data/index/page/1
  2. http://serverName/index.php/Data/index/page/1
复制代码

设置每页记录数

默认的情况下。分页显示每页会显示20条数据,假设你希望改变每页显示的数据量的话,实例化分页类的时候能够传人第二个參数就可以:

  1. $Page       = new Page($count,5);// 实例化分页类 传入总记录数而且每页显示5条记录
复制代码

因为查询方法中我们使用了$Page->listRows属性。所以无需更改,但假设你是直接在查询方法中使用数字请记得一起更改。

以下是官方的分页演示样例的显示效果:

传入分页条件

默认情况下,分页类会自己主动获取当前页面的POST(优先)或者GET变量作为分页跳转的传值,假设须要指定传入当前分页跳转的參数。就能够通过设置parameter属性,parameter属性支持2种方式传值:字符串和数组。字符串採用var1=val1&var2=val2...的格式。比如:

  1. foreach($map as $key=>$val) {
  2. $Page->parameter   .=   "$key=".urlencode($val).'&';
  3. }
复制代码

或者直接传入数组:

  1. $Page->parameter   =   array_map('urlencode',$map);
复制代码

因为内部调用了U函数,分页类终于生成的分页跳转链接会依据当前的URL设置自己主动生成和当前URL模式一致的地址。所以无需操心分页链接的參数影响URL地址。

分页路由支持

如果你的分页跳转链接地址採用了路由,那么能够通过设置url參数。比如,如果我们的分页URL地址格式是:

  1. http://serverName/data/index/1
  2. http://serverName/data/index/2
  3. http://serverName/data/index/3
复制代码

这种URL路由地址,那么我们就能够设置

  1. $Page->url = 'data/index';
复制代码

设置后,分页类的链接地址会自己主动生成上面的URL格式地址。

注意。url參数和parameter 同一时候使用的话。后者无效。

设置显示的页数

能够在实例化分页类之后。进行相关属性的设置。默认情况下。页面显示的页数是5。我们能够改动:

  1. $Page->rollPage = 3;
复制代码

这样,页面上仅仅能同一时候看到3个分页

分页显示定制

上面讲的是分页的參数设置。以下讲下怎样对分页显示效果(包含样式)进行设置。

默认的分页效果可能不能满足全部的要求,分页类提供了一个setConfig方法来改动默认的一些设置。

比如:

  1. $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的更多相关文章

  1. thinkphp 数据分页

    通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); ...

  2. js 从一个json拼接成另一个json,并做json数据分页table展示

    先给数据: //原始json数据json = [{"id":"1","aid":"013","performa ...

  3. ThinkPHP快速实现数据分页(前端/后端分离)

    数据 分页 可能是web 编程里最常用到的功能之一.thinkphp 实现分页功能十分简洁.只需要定义 几个参数 就能搞定.当然,扩展也是十分方便的. 让我们现在就开始thinkphp的分页实现吧. ...

  4. thinkphp自定义分页效果

    TP自带了一个分页函数,挺方便使用的. 下面是我的使用方法: /*****************分页显示start*************************/ $arr_page=$this ...

  5. 数据分页 THINKPHP3.2 分页 三种分页方法

    数据分页 复制本页链接 opensns 通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方 ...

  6. THINKPHP ajax分页示例

    先把框架的page类改造一下 路径在ThinkPHP/Library/Think/Page.class.php文件 添加一个方法 ajax_show 代码如下 <?php /** * 组装分页链 ...

  7. ThinkPHP3.2.3学习笔记6---专题---数据分页

    http://document.thinkphp.cn/manual_3_2.html#data_page thinkphp3.2.3中分类的功能调用的文件$THINKPHP_HOME/ThinkPH ...

  8. salesforce 零基础开发入门学习(八)数据分页简单制作

    本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...

  9. ThinkPhp之分页

    function page($count,$pagesize=3){ $Page=new \Think\Page($count,$pagesize); //每页显示记录数 $Page->setC ...

随机推荐

  1. An existing connection was forcibly closed by the remote host

    StackOverflow https://stackoverflow.com/questions/5420656/unable-to-read-data-from-the-transport-con ...

  2. Connect to MongoDB

    https://docs.mongodb.com/getting-started/csharp/client/ MongoDB C# Driver is the officially supporte ...

  3. nyoj--1009--So Easy[Ⅰ](数学)

    So Easy[Ⅰ] 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给出任意一个三角形的三个边a,b,c. 要求:求出这个三角形的外接圆半径. 输入 输入数据有多组. ...

  4. 38.angular的scope作用域

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. S ...

  5. [USACO14FEB]路障Roadblock

    题目:洛谷P2176. 题目大意:有n个点m条无向边,一个人要从1走到n,他会走最短路.现在可以让一条边的长度翻倍,求翻倍后这个人要多走多少距离. 解题思路:首先可以知道,翻倍肯定是在最短路上的某条边 ...

  6. ECNUOJ 2142 放书

    放书 Time Limit:1000MS Memory Limit:65536KBTotal Submit:409 Accepted:173 Description  你要把一叠书放进一些箱子里面,为 ...

  7. 洛谷 P1056 排座椅

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...

  8. MYSQL 更新时间自己主动同步与创建时间默认值共存问题

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自己主动填充 ...

  9. [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 ...

  10. 基于express+redis高速实现实时在线用户数统计

    作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样基于express+redis高速实现实时在线用户数统计. 1. 在github.com上创建项目uv-tj.将其同步到本地: ...