Yii的两种分页方法(模型层Model&&SQL语句)分页的样式
- 4441
- 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的使用示例

