ThinkPHP示例之ajax分页操作,演示了如何进行数据分页操作,需要使用表单示例中的数据表,或者直接创建数据表如下:
修改项目配置文件中的数据库连接信息,打开示例页面后显示:
如果没有看到数据的话,请首先往该数据表里面手动添加一些数据来测试分页效果。
本分页类已被修改,用的是github上最新的分页类,通过实例化page类时直接传入html里的ajax列表容器和分页div所在的容器id,配合相应模板,即可轻松实现ajax分页。
另外,对分页调用做了 数据无关的封装 ,可以 数组分页也可sql分页 ,详情描述看action中的注释,为了项目中的使用方便,分页方法传入的参数用 数组 传入。
关键代码:
注意page方法返回值是为了获取当前页记录的数量。
放入官方的示例目录中访问即可
- 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 ;
复制代码
如果没有看到数据的话,请首先往该数据表里面手动添加一些数据来测试分页效果。
本分页类已被修改,用的是github上最新的分页类,通过实例化page类时直接传入html里的ajax列表容器和分页div所在的容器id,配合相应模板,即可轻松实现ajax分页。
另外,对分页调用做了 数据无关的封装 ,可以 数组分页也可sql分页 ,详情描述看action中的注释,为了项目中的使用方便,分页方法传入的参数用 数组 传入。
关键代码:
- public function index() {
- import("@.ORG.Page"); //导入分页类
- $Form = M('Form');
- $list = $Form->select();
- // $list = range(2,51);
- $param = array(
- 'result'=>$list, //分页用的数组或sql
- 'listvar'=>'list', //分页循环变量
- 'listRows'=>10, //每页记录数
- 'parameter'=>'search=key&name=thinkphp',//url分页后继续带的参数
- 'target'=>'content', //ajax更新内容的容器id,不带#
- 'pagesId'=>'page', //分页后页的容器id不带# target和pagesId同时定义才Ajax分页
- 'template'=>'Index:ajaxlist',//ajax更新模板
- );
- $this->page($param);
- $this->display();
- }
- /**
- +----------------------------------------------------------
- * 分页函数 支持sql和数据集分页 sql请用 buildSelectSql()函数生成
- +----------------------------------------------------------
- * @access public
- +----------------------------------------------------------
- * @param array $result 排好序的数据集或者查询的sql语句
- * @param int $totalRows 每页显示记录数 默认21
- * @param string $listvar 赋给模板遍历的变量名 默认list
- * @param string $parameter 分页跳转的参数
- * @param string $target 分页后点链接显示的内容id名
- * @param string $pagesId 分页后点链接元素外层id名
- * @param string $template ajaxlist的模板名
- * @param string $url ajax分页自定义的url
- +----------------------------------------------------------
- */
- public function page($param) {
- extract($param);
- import("@.ORG.Page");
- //总记录数
- $flag = is_string($result);
- $listvar = $listvar ? $listvar : 'list';
- $listRows = $listRows? $listRows : 21;
- if ($flag)
- $totalRows = M()->table($result . ' a')->count();
- else
- $totalRows = ($result) ? count($result) : 1;
- //创建分页对象
- if ($target && $pagesId)
- $p = new Page($totalRows, $listRows, $parameter, $url,$target, $pagesId);
- else
- $p = new Page($totalRows, $listRows, $parameter,$url);
- //抽取数据
- if ($flag) {
- $result .= " LIMIT {$p->firstRow},{$p->listRows}";
- $voList = M()->query($result);
- } else {
- $voList = array_slice($result, $p->firstRow, $p->listRows);
- }
- $pages = C('PAGE');//要ajax分页配置PAGE中必须theme带%ajax%,其他字符串替换统一在配置文件中设置,
- //可以使用该方法前用C临时改变配置
- foreach ($pages as $key => $value) {
- $p->setConfig($key, $value); // 'theme'=>'%upPage% %linkPage% %downPage% %ajax%'; 要带 %ajax%
- }
- //分页显示
- $page = $p->show();
- //模板赋值
- $this->assign($listvar, $voList);
- $this->assign("page", $page);
- if ($this->isAjax()) {//判断ajax请求
- layout(false);
- $template = (!$template) ? 'ajaxlist' : $template;
- exit($this->fetch($template));
- }
- return $voList;
- }
复制代码
放入官方的示例目录中访问即可
来源:oschina
链接:https://my.oschina.net/u/200898/blog/184546