在使用Yii Framework框架时,经常会用到Yi分页方法。
1、使用Yii中的CdbCriteria进行查询时实现翻页采用CPagination类:
在controller中的查询代码如下:
$criteria = new CDbCriteria;
$criteria -> addCondition("uid =:uid "); //添加查询条件$criteria -> params[':uid'] = $UID; //绑定查询条件的参数
$count= user::model()->count($criteria); //统计查询结果集中记录总数
$pager= new CPagination($count); //实例化CPagination类
$pager ->pageSize = 10; //设置一页显示记录数
$pager->pageVar = 'p'; //自定义URL中页码的参数,可以不设置
$pager->applyLimit($criteria); //将结果集进行过滤处理
以上就是在controller中最简洁的设置,如果对于翻页有特殊要求可以通过Yii手册查询CPagination类来进行具体设置。
下面是在view中的代码:
<?php
$this->widget('CLinkPager',array(
'header'=>'',
'firstPageLabel' => '首页',
'lastPageLabel' => '末页',
'prevPageLabel' => '上一页',
'nextPageLabel' => '下一页',
'pages' => $PAGE,
'maxButtonCount'=>5,
)
);
?>
2、自定义分页
'defaultOrder'=>array('title' => false), false是升序,true是倒叙
使用CPagination呈现相关信息到页码. 当数据需要渲染到多页时,我们可能使用去呈现信息,诸如itemCount, pageSize, currentPage,等等. 这些信息被传递到pagers
controller中代码如下:
$sql = "SELECT * FROM USER";
$data = Yii::app()->db->createCommand($sql)->queryAll();
$count = count($data);
$pages = new CPagination($count);
$pages->pageSize = 4;
//$pages->setCurrentPage(2);
$pdata =Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
$pdata->bindValue(':offset', $pages->currentPage*$pages->pageSize);//$pages->getOffset();
$pdata->bindValue(':limit', $pages->pageSize);//$pages->getLimit();
$info = $pdata->queryAll();
将变量传递到view中,在view中写入下面代码:
<?php
$this->widget('CLinkPager',array(
'header'=>'',
'firstPageLabel' => '首页',
'lastPageLabel' => '末页',
'prevPageLabel' => '上一页',
'nextPageLabel' => '下一页',
'pages' => $pages,
'maxButtonCount'=>13 //分页的按钮个数
)
);
?>
3.使用SQL查询进行分页:
controller代码如下:
public function actionSQL(){$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM film')->queryScalar();
$sql = 'SELECT film_id,title FROM film';
$dataProvider=new CSqlDataProvider($sql,array(
'keyField'=>'film_id', //sql in select table column default id
'totalItemCount'=>$count,
'sort'=>array(
'attributes'=>array('title'), //sql table columns
'defaultOrder'=>array('title' => true),
),
'pagination'=>array(
'pageSize'=>100,
),
));
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}
view中代码如下:
<?php foreach($dataProvider->data as $film):?>
< ?php echo $film->title?>
< ?php endforeach?>
< ?php $this->widget('CLinkPager',array(
'pages'=>$dataProvider->pagination))?>