yii cgridview 默认的筛选如何做成选择框
效果图
参照 http://www.yiiframework.com/doc/api/1.1/CGridColumn
http://www.yiiframework.com/doc/api/1.1/CGridView
http://www.yiiframework.com/forum/index.php/topic/30694-cgridview-filter-dropdown-from-array/ (*)
代码
<?php $data = $model->search(); $filter = Category::model()->findAll(); $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'news-grid', 'dataProvider' => $data, 'filter'=>$model, 'columns'=>array( 'nid', // 'cid', array( 'name' => 'cid', 'filter' => CHtml::listData($filter, "cid", "c_name"), 'value' => 'Category::model()->findByPk($data->cid)->c_name', ), 'n_title', array( 'class'=>'CButtonColumn', //自定义删除提示 'deleteConfirmation'=>"js:'ID为 '+$(this).parent().parent().children(':first-child').text()+' 的记录将被删除,确定删除?'", ), ), )); ?>
'filter' => CHtml::listData($filter, "cid", "c_name"), 这个就是实现下拉列表的语句,我的代码因为关联了一个分类表,所以写的麻烦了一些,'value'数据也是关联了分类表里的名称,如果无需关联的话,value可以不写,yii默认会显示数据库里的数据.
P.S 我发现了一个问是,也不知道是否yii的bug,比如
'value' => 'Category::model()->findByPk($data->cid)->c_name', 这里我在关联的时候,如果findByPk传进的是空的话,那么yii会返回一个不是对象的错误提示,其实如果是空的话,可以提示的更友好一些,记录一下,方便查看 :)