CListView是我们在使用Yii时经常用到的控件,它的设置可繁可简,简单的5行代码就可以写完;复杂的也许就要写上几十行代码。记性不佳,本着好记忆不如烂笔头的精神,记录一下使用方法。
public function actionIndex() { $criteria = new CDbCriteria(); /* ... 查询条件 Condition */ $count = SomeModel::model()->count($criteria); $pager = new CPagination($count); $pager->pageSize=20; $pager->applyLimit($criteria); $dataProvider = SomeModel::model()->findAll($criteria); $this->render( 'index', array( 'dataProvider'=>$dataProvider, "pager"=>$pager ), ); }
稍作修改还能按照 Bootstrap 格式显示内容
$this->widget('zii.widgets.CListView', array( //$dataProvider 列表内容的数据源 'dataProvider'=>$dataProvider, // 当 dataProvider 为空时显示的内容。 'emptyText' => '没有符合条件的记录!', // 部件的HTML属性。 'htmlOptions' = > array( 'class'=>'data_class', ), //列表项目的格式,对应 _view.php 文件 'itemView'=>'_view', //使用AJAX加载数据时进度条容器的CSS类 默认为‘loading’。 'loadingCssClass' => 'loading', //template是整个CListView的模板: //{summary}的位置会显示基本描述,可修改summaryText项来设置描述的模板 //{sorter}的位置会显示更改排序方式的按钮,需要定义sortableAttributes项来描述哪一属性是可排序的 //{items}的位置会显示列表,列表中每一项的格式来自itemView项定义的文件 //{pager}的位置会显示分页器,可通过定义pager项来设定分页器的显示方式 'template'=>' <div class="summary">{summary}</div> <div class="sorter">{sorter}</div> <table class="table table-striped table-hover">{items}</table> <div class="pager">{pager}</div>', //定义summary的div容器的class 'summaryCssClass'=>'summary_container', //定义summary内容的格式 //其中可用到以下变量: //{start}表示本页的第一条是全部中的第几条 //{end}表示本页最后一条是全部中的第几条 //{count}表示全部共几条 //{page}表示当前页码 //{pages}表示总页数 'summaryText'=>'共{count}条,当前页显示第{start}-{end}条', //定义可排序的属性 'sortableAttributes'=>array('title','create_time'), //定义sorter的div容器的class 'sorterCssClass'=>'sorter_container', //定义的文字显示在sorter可排序属性的前面 'sorterHeader'=>'更改排序:', //定义的文字显示在sorter可排序属性的后面 'sorterFooter'=>'', //定义pager的div容器的class 'pagerCssClass'=>'pager_container', // 视图容器的标签。默认为‘div’。 // 如果使用表格(<tr><td></td></tr>)显示每项数据,可以用 tbody 代替div作为数据列表的容器 'tagName' => 'tbody', // 显示页码的容器的CSS类。默认为‘pager’。 'pagerCssClass' => 'pager', //显示各条数据的容器的CSS类。默认为‘items’。 'itemsCssClass' => 'items', 'pager'=>array( //关于分页器这个array,具体还有很多属性,可参考CLinkPager的API //定义要调用的分页器类,默认是CLinkPager,需要完全自定义,还可以重写一个 'class'=>'CLinkPager', //定义分页器的要调用的css文件,false为不调用,不调用则需要亲自己css文件里写这些样式 'cssFile'=>false, //定义的文字将显示在pager的最前面 'header'=>'转往分页:', //定义的文字将显示在pager的最后面 'footer'->'', //定义首页按钮的显示文字 'firstPageLabel'=>'首页', //定义末页按钮的显示文字 'lastPageLabel'=>'尾页', //定义下一页按钮的显示文字 'nextPageLabel'=>'下一页', //定义上一页按钮的显示文字 'prevPageLabel'=>'前一页', // 要显示的最多分页按钮数。默认10。 'maxButtonCount'=>8, //返回此pager所用的分页信息。 // CPagination 类型 'pages' => $pager, // 分页标签的HTML属性。 // Bootstrap 可选择为 pagination 'htmlOptions' = > array( 'class'=>'pagination', ), //当前分页容器的 class // Bootstrap 可选择为 active 'selectedPageCssClass'=>"active" ), ));
参考另一篇博文:http://blog.sina.com.cn/s/blog_71d4414d0100yu6k.html
有两个位置可以放,
放在 protected/extensions 中,在使用是import进来,或在config文件中import进来;
放在 protected/components 中,作为组件存在,不需要import
class MyPager extends CLinkPager
入口函数是:public function run()
,当显示分页器时run()被调用,里面的输出就会显示在相应位置;
其他的完全自定义,如果你不知道上一页、下一页、首页、尾页、总页数、当前页码等信息,可以参考CLinkPager的源码,yii/frameworks/web/widgets/pagers/CLinkPager.php
3、调用方式
在View里的相应widget,定义pager的class为自定义的分页器类名即可,参考:
$this->widget( 'zii.widgets.CListView', array( 'dataProvider'=>$dataProvider, 'itemView'=>'_view', 'pager'=>array( 'class'=>'MyPager', ) ));