我们行来看我自己做的一个实例
代码如下 | 复制代码 |
CREATE TABLE IF NOT EXISTS `think_form` ( `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 ; |
修改项目配置文件中的数据库连接信息,打开示例页面后显示
如果没有看到数据的话,请首先往该数据表里面手动添加一些数据来测试分页效果。
新版的分页类可以自动根据当前的URL模式配置生成分页链接,可以更改配置文件中的URL_MODEL和URL_PATHINFO_DEPR参数查看分页链接的区别。
示例中使用的分页类在扩展中心可以单独下载,本示例为了演示方便,直接把分页类放入了项目类库目录下面,实际应用中,需要根据你的实际位置引入分页类库。
关键代码:
代码如下 | 复制代码 |
import("@.ORG.Page"); //导入分页类 $Form = M('Form'); $count = $Form->count(); //计算总数 $Page = new Page($count, 5); $list = $Form->limit($Page->firstRow. ',' . $Page->listRows)->order('id desc')->select(); // 模拟设置分页额外传入的参数 $Page->parameter = 'search=key&name=thinkphp'; // 设置分页显示 $Page->setConfig('header', '条数据'); $Page->setConfig('first', '<<'); $Page->setConfig('last', '>>'); $page = $Page->show(); |
下面我把它结合起来
代码如下 | 复制代码 |
<?php // +---------------------------------------------------------------------- // | 参考 ThinkPHP 分页类改变而来 // +---------------------------------------------------------------------- // | 有两种样式:1、当面页码始终在中间。 2、当点到分页条两边的页码时,自动翻页(默认)。 // +---------------------------------------------------------------------- // | Author: zbseoag <zbsoeagy@qq.com> // +---------------------------------------------------------------------- // $Id: page.class.php 2013-05-26 00:08:49 session_start(); //由于要记录用户是向前,还是向后翻页,故启用了session class Page{ public $page; //当前页 if(0 == $this->records) return ''; if('mid' == $this->style){ //当前页居中 for($i = $this->startPage; $i <= $this->endPage; $i++){ return $pageStr; ?> |
下面介绍官网的提供几处分页类效果代码
分页类位于扩展类库下面,需要先导入才能使用,下面是数据分页的两种示例。
第一种:利用Page类和limit方法
代码如下 | 复制代码 |
1.$User = M('User'); // 实例化User对象 2.import('ORG.Util.Page');// 导入分页类 3.$count = $User->where('status=1')->count();// 查询满足要求的总记录数 4.$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数 5.$show = $Page->show();// 分页显示输出 6.// 进行分页数据查询 注意limit方法的参数要使用Page类的属性 7.$list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select(); 8.$this->assign('list',$list);// 赋值数据集 9.$this->assign('page',$show);// 赋值分页输出 10.$this->display(); // 输出模板 |
2第二种:分页类和page方法的实现
代码如下 | 复制代码 |
1.$User = M('User'); // 实例化User对象 2.// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数使用 $_GET[p]获取 3.$list = $User->where('status=1')->order('create_time')->page($_GET['p'].',25')->select(); 4.$this->assign('list',$list);// 赋值数据集 5.import(“ORG.Util.Page”);// 导入分页类 6.$count = $User->where('status=1')->count();// 查询满足要求的总记录数 7.$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数 8.$show = $Page->show();// 分页显示输出 9.$this->assign('page',$show);// 赋值分页输出 10.$this->display(); // 输出模板 |
2带入查询条件
如果是POST方式查询,如何确保分页之后能够保持原先的查询条件呢,我们可以给分页类传入参数,方法是给分页类的parameter属性赋值:
代码如下 | 复制代码 |
1.import('ORG.Util.Page');// 导入分页类 2.$mapcount = $User->where($map)->count();// 查询满足要求的总记录数 3.$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数 4.//分页跳转的时候保证查询条件 5.foreach($map as $key=>$val) { 6. $Page->parameter .= "$key=".urlencode($val).'&'; 7.} 8.$show = $Page->show();// 分页显示输出 |
1分页样式定制
默认的分页输出效果是
我们可以对输出的分页样式进行定制,分页类Page提供了一个setConfig方法来修改默认的一些设置。例如:
1.$page->setConfig('header','个会员');
setConfig方法支持的属性包括:
header:头部描述信息,默认值 “条记录”
prev:上一页描述信息,默认值是“上一页”
next:下一页描述信息,默认值是“下一页”
first:第一页描述信息,默认值是“第一页”
last:最后一页描述信息,默认值是“最后一页”
theme :分页主题描述信息,包括了上面所有元素的组合