Yii使用技巧大汇总(4)

每一行代表一个数据项,一列通常代表数据项的一个属性
CGridView支持排序和分页,可以用ajax或普通的方式
CgridView必序和data provider一起使用

最简单的用法

$dataprovider = new CActiveDataProvider('Post'); $this->widget('zii.widgets.grid.CGridView',array( 'dataProvider'=>$dataprovider, ));

这会用表格的方式显示每一条数据项,每一列是Post的一个属性

在显示中带了分页和排序

我们可以自定义CgridView::columns属性,以自定义表格列的显示方式

这个cloumns如何配置呢?

其是一个数组,每一个数组元素对应着一列的配置,可以是字符串或数组

1、如果是字符串,格式是name:type:header 后两者是可选的,根据这三个值,创建一个CdatColumn实例

其中type参见CFormatter

2、如果是数组,其可以实例化CDdataColumn、ClinkColumn,CButtonColumn,CCheckBoxColumn实例,具体实例化哪个由数组中的class指定,默认是CDataColumn

2.1,如果

复制代码 代码如下:

class=>'CDataCloumn'


则可以指定name或者value,如果指定以value优先

用CDataColumn时如何以关联表的数据序列?

代码如下:表示可以post关联的author中的username排序列

$dataprovider = new CActiveDataProvider('Post',array( 'criteria'=>array( 'with'=>'author', ), 'sort'=>array( 'attributes'=>array( 'title','create_time', 'author_id'=>array('asc'=>'author.username asc','desc'=>'author.username desc','label'=>'作者') ) ), )); $this->widget('zii.widgets.grid.CGridView',array( 'dataProvider'=>$dataprovider, 'columns'=>array( 'title', 'create_time', array('name'=>'author_id','value'=>'$data->author->username'), ), ));

另外CDataColumn还有一个filter属性,如果是空,那么生成一个textfield,如果是数组(键值),则生成一个dropDownlist在当前列的上部,供搜索

2.2:如果class=>"CLinkColumn"

复制代码 代码如下:

array('class'=>'CLinkColumn','label'=>'查看用户','url'=>Yii::app()->createURL('user/edit'))

则生成一个连接

2.3:如果class="CCheckBoxColumn"

复制代码 代码如下:

array('class'=>'CCheckBoxColumn','name'=>'title','id'=>'select'),

可以生成一个checkbox供选择,且只能选一个

可以配置CGridView::selectableRows 如果是0,则不能选,如果 1,只选一个如果是2或其它值,则可以选多个

代码如下:

$this->widget('zii.widgets.grid.CGridView',array( 'dataProvider'=>$dataprovider, 'selectableRows'=>2, 'columns'=>array( array('class'=>'CCheckBoxColumn','name'=>'title','id'=>'select'), ),

2.3:如果class="CButtonColumn"

array( 'class'=>'CButtonColumn', 'updateButtonUrl'=>'Yii::app()->createUrl("post/edit",array("id"=>$data->id));', ),

修改updateButtonUrl为编辑贴子

如何用gridview生成一个代搜索的管理列表

1、在Model的rules 设定可以搜索的属性

复制代码 代码如下:

array('title, status, create_time', 'safe', 'on'=>'search'),


2、在Model中,添加搜索时的方法

public function search() { $criteria=new CDbCriteria; $criteria->compare('title',$this->title,true); $criteria->compare('status',$this->status); $criteria->compare('create_time',$this->create_time); return new CActiveDataProvider('Post', array( 'criteria'=>$criteria, 'sort'=>array( 'defaultOrder'=>'status, update_time DESC', ), )); }

3、在Controler中,写接受搜索用到的表单的值的方法

public function actionAdmin() { $model=new Post('search'); if(isset($_GET['Post'])) $model->attributes=$_GET['Post']; $this->render('admin',array( 'model'=>$model, )); }

4、在view中用CGridView显示

设置好

<?php $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( ), )); ?>

以上代码大部分是yii自动生成的,只要做少量修改即可

有时候会出现,搜索后页面为空的清况,原因可能是

layout/main.php中

echo $content外层无div,就是说main.php中必须有一个div包含$content

其用列表的形式显示数据,不象CGridView一样,用表格显示数据,CListView用一个 view模板来显示每一条数据

其支持排序与分页

常用的代码如下

<?php $dataProvider = new CActiveDataProvider('Post',array( 'pagination'=>array( 'pageSize'=>2 ), )); $this->widget('zii.widgets.CListView',array( 'dataProvider'=>$dataProvider, 'itemView'=>'_view', 'template'=>' {summary} {items} {pager}{sorter}', 'sortableAttributes'=>array( 'title', 'create_time'=>'Post Time', ), ));

快速生成表单,支持ajax验证,对于比较复杂的验下最好是自己生成表单,写验证方法
常用代码,在Controller中

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2f8106786391352ef2279db1bd51a4b1.html