Yii的两种分页方法(模型层Model&&SQL语句)分页的样式
- 4277
- PHP
- 6
- super_dodo
- 2014/08/21
分页类已经成为了每个网站开发所必须的类了,Yii也提供了非常好的分页类。稍加改进,则可以展示优美的界面效果和功能了。
第一种方法:主要借助model里面的一些方法,包括查询和等.直接上代码。
// 查询列表--带分页的 public function getList($model, $isAll = false) { $request = Yii::app()->request; //请求 $pager = new CPagination(); //实例化分页类 $data = array('list'=>array(), 'pager'=>array()); //组装两个数组,列表和分页的信息 $data['filter'] = $model->getFilter($model->attributes, $isAll); //得到查询的数组,可返回前端,提供默认选中 $criteria = $model->getCriteria($data['filter']); //查询的条件 $page = max($request->getParam('page', 0), 1); $count = $model->count($criteria); if($count == 0) return $data; $uPageSize = $request->getParam('uPageSize',null); //获取页面传递的分页单条的记录数 if(!empty($uPageSize)){ //如果前端传递了分页参数,则采用用户自定义 $pager->pageSize = intval($uPageSize); }else{ //如果前端未传递分页参数,则采用系统默认配置20条 $pager->pageSize = '20'; } $pageCount = ceil($count / $pager->pageSize); $page = min($page, $pageCount); $criteria->offset = ($page - 1) * $pager->pageSize; $criteria->limit = $pager->pageSize; $list = $model->findAll($criteria); $data['pager'] = array( 'page'=>$page, 'count'=>$count, 'pageCount'=>$pageCount ); $data['list'] = $list; return $data; } //使用的方法 //控制器里面 $data = $this->getList(PostList::model()); echo '<pre>'; print_r($data); //$this->render('index', array('data' => $data)); //模型层 // 过滤器 public function getFilter() { $request = Yii::app()->request; $filter = $this->attributes; foreach($this->attributes as $key => $val) { $filter[$key] = $request->getParam($key, null); } return $filter; } // 筛选器 public function getCriteria($filter) { $criteria=new CDbCriteria; foreach($this->attributes as $key => $val) { $fuzzy = in_array($key, array('name')); if($filter[$key] !== null) $criteria->compare($key, $filter[$key], $fuzzy); } $criteria->order = ' sort DESC,id DESC'; return $criteria; }
第二种:有些时候需要连表查询或者一些其他的查询,用sql比较好处理的时候,可以直接使用sql语句进行分页的查询。
// 查询列表-通过传入的sql语句 public function getListBySql($sql,$uPageSize='10') { $request = Yii::app()->request; $data = array('list'=>array(), 'pager'=>array()); $result = Yii::app()->db->createCommand($sql)->query(); if($result->rowCount == '0') return $data; $pager = new CPagination($result->rowCount); $page = max($request->getParam('page', 0), 1); //前端传来的当前页码 if(!empty($uPageSize)){ //如果前端传递了分页参数,则采用用户自定义 $pager->pageSize = intval($uPageSize); }else{ //如果前端未传递分页参数,则采用系统默认配置20条 $pager->pageSize = '10'; } $models =Yii::app()->db->createCommand($sql.' LIMIT :offset, :limit'); $models->bindValue(':offset', ($page - 1) * $pager->pageSize); $models->bindValue(':limit', $pager->pageSize); $pageCount = ceil($result->rowCount / $pager->pageSize); $data['pager'] = array( 'page'=>$page, 'count'=>$result->rowCount, 'pageCount'=>$pageCount ); if($page > $pageCount){ $data['list'] = ''; }else{ $data['list'] = $models->queryAll(); } return $data; } //使用方法 $sql = "SELECT * FROM post_list WHERE {$where} ORDER BY id DESC "; $data = $this->getListBySql($sql); echo '<pre>'; print_r($data);
建议把以上两个方法放在你的基础controller里面。这样你在控制器里面 直接调用即可。。
分页类的界面和样式请移步 http://www.dodobook.net/php/804 点击进入查看
别惹我,我疯起来连我自己都打!
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例