CListView


yii CListView是非常灵活的显示控件,以下较全面的定义了所有可配置项:

更多功能请见zii.widgets.CListView参考手册

  1. $this->widget('zii.widgets.CListView', array(
  2.     'dataProvider'=>$dataProvider,
  3.     'itemView'=>'_view',
  4.     'template'=>'<div class="summary">{summary}</div><div class="sorter">{sorter}</div><div class="list">{items}</div><div class="pager">{pager}</div>',
  5.     //template是整个CListView的模板:
  6.     //{summary}的位置会显示基本描述,可修改summaryText项来设置描述的模板
  7.     //{sorter}的位置会显示更改排序方式的按钮,需要定义sortableAttributes项来描述哪一属性是可排序的
  8.     //{items}的位置会显示列表,列表中每一项的格式来自itemView项定义的文件
  9.     //{pager}的位置会显示分页器,可通过定义pager项来设定分页器的显示方式
  10.  
  11.     'summaryCssClass'=>'summary_container',//定义summary的div容器的class
  12.     'summaryText'=>'共{count}条,当前页显示第{start}-{end}条',
  13.     //定义summary的显示内容,其中可用到以下变量:
  14.     //{start}表示本页的第一条是全部中的第几条
  15.     //{end}表示本页最后一条是全部中的第几条
  16.     //{count}表示全部共几条
  17.     //{page}表示当前页码
  18.     //{pages}表示总页数
  19.  
  20.     'sortableAttributes'=>array('title','create_time'),//定义可排序的属性
  21.     'sorterCssClass'=>'sorter_container',//定义sorter的div容器的class
  22.     'sorterHeader'=>'更改排序:',//定义的文字显示在sorter可排序属性的前面
  23.     'sorterFooter'=>'',//定义的文字显示在sorter可排序属性的后面
  24.  
  25.     'pagerCssClass'=>'pager_container',//定义pager的div容器的class
  26.     'pager'=>array(
  27.         'class'=>'CLinkPager',//定义要调用的分页器类,默认是CLinkPager,需要完全自定义,还可以重写一个,参考我的另一篇博文:http://blog.sina.com.cn/s/blog_71d4414d0100yu6k.html
  28.         'cssFile'=>false,//定义分页器的要调用的css文件,false为不调用,不调用则需要亲自己css文件里写这些样式
  29.         'header'=>'转往分页:',//定义的文字将显示在pager的最前面
  30.         'footer'->'',//定义的文字将显示在pager的最后面
  31.         'firstPageLabel'=>'首页',//定义首页按钮的显示文字
  32.         'lastPageLabel'=>'尾页',//定义末页按钮的显示文字
  33.         'nextPageLabel'=>'下一页',//定义下一页按钮的显示文字
  34.         'prevPageLabel'=>'前一页',//定义上一页按钮的显示文字
  35.         //关于分页器这个array,具体还有很多属性,可参考CLinkPager的API
  36.     ),
  37. ));

下面是示例:

2015-11-15_164146.gif

  1. <?php
  2. $this->widget ( 'zii.widgets.CListView', array (
  3. 'dataProvider' => $dataProvider,
  4. 'itemView' => '_index/_index_view',
  5. 'template' => "{items}\n{pager}",
  6. 'itemsCssClass' => 'table table-striped table-bordered table-hover text-center th_center',
  7. 'pagerCssClass' => 'widget-foot',
  8. 'pager' => array (
  9. 'class' => 'CLinkPager',
  10. 'nextPageLabel' => '下一页',
  11. 'prevPageLabel' => '上一页',
  12. 'firstPageLabel' => '首页',
  13. 'lastPageLabel' => '末页',
  14. 'htmlOptions' => array (
  15. 'class' => 'pagination'
  16. ),
  17. 'header' => '',
  18. 'hiddenPageCssClass' => 'disabled',
  19. 'selectedPageCssClass' => 'active'
  20. )
  21. ) );
  22. ?>

由于CListView默认div标签显示的,如果想使用table标签显示,请重写CListView类,下面是示例代码:

1,新建MyCListView文件/protected/components/MyCListView.php

  1. <?php
  2. Yii::import ( 'zii.widgets.CListView' );
  3. class MyCListView extends CListView {
  4. public $preItemsTag = '';
  5. public $postItemsTag = '';
  6. public $itemsThead=array();
  7. public function renderItems() {
  8. $starHtml=CHtml::openTag ( $this->itemsTagName, array (
  9. 'class' => $this->itemsCssClass 
  10. ) ) . "\n";
  11. $data = $this->dataProvider->getData ();
  12. $data_count=($n = count ( $data ));
  13. if ($data_count > 0) {
  14. $itemsThead=$this->itemsThead;
  15. $theadHtml='<thead><tr>';
  16. foreach ($itemsThead as $i_key=>$i_value){
  17. $theadHtml.='<th width='.$i_value.'>'.$i_key.'</th>';
  18. }
  19. $theadHtml.='</tr></thead>';
  20. $starHtml.=$theadHtml;
  21. }
  22. echo $starHtml;
  23. if ($data_count > 0) {
  24. $owner = $this->getOwner ();
  25. $viewFile = $owner->getViewFile ( $this->itemView );
  26. $j = 0;
  27. foreach ( $data as $i => $item ) {
  28. $data = $this->viewData;
  29. $data ['index'] = $i;
  30. $data ['data'] = $item;
  31. $data ['widget'] = $this;
  32. $owner->renderFile ( $viewFile, $data );
  33. if ($j ++ < $n - 1)
  34. echo $this->separator;
  35. }
  36. } else
  37. $this->renderEmptyText ();
  38. echo CHtml::closeTag ( $this->itemsTagName );
  39. }
  40. }

2,修改视图文件

  1. <?php
  2. $this->widget ( 'application.components.MyCListView', array (
  3. 'dataProvider' => $dataProvider,
  4. 'itemView' => '_index/_index_view',
  5. 'template' => "{items}\n{pager}",
  6. 'itemsTagName' => 'table',
  7. 'itemsThead' => array (
  8. 'ID' => '5%',
  9. '姓名' => '10%',
  10. '手机' => '10%',
  11. '公司类型' => '10%',
  12. '操作' => '10%' 
  13. ),
  14. 'itemsCssClass' => 'table table-striped table-bordered table-hover text-center th_center',
  15. 'pagerCssClass' => 'widget-foot',
  16. 'pager' => array (
  17. 'class' => 'CLinkPager',
  18. 'nextPageLabel' => '下一页',
  19. 'prevPageLabel' => '上一页',
  20. 'firstPageLabel' => '首页',
  21. 'lastPageLabel' => '末页',
  22. 'htmlOptions' => array (
  23. 'class' => 'pagination' 
  24. ),
  25. 'header' => '',
  26. 'hiddenPageCssClass' => 'disabled',
  27. 'selectedPageCssClass' => 'active' 
  28. ) 
  29. ) );
  30. ?>

效果图如下:

2015-11-15_164105.gif