2012-08-07 142 views
4

问:如何为我的gridview创建过滤器?CGridView自定义列过滤器

status:customer name = first_name。姓氏

这是我的网格视图

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'customer-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     array(
       'header'=>'Customer Name', 
       'name'=>'$data->first_name', 
       'value'=>'$data->first_name.\' \'.$data->last_name', 
      ),   
     'company_name', 
     'country', 
     'state', 
     'city',  
     'address1',   
     'phone1',  
     'email',   
     array('name' => 'company_id', 
       'value'=>'$data->companies->name', 
       'filter'=>CHtml::listData($records, 'id', 'name'), 
     ), 
     array(
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); ?> 

回答

11

在视图

<?php $this->widget('zii.widgets.grid.CGridView', array(
     'id'=>'customer-grid', 
     'dataProvider'=>$model->search(), 
     'filter'=>$model, 
     'columns'=>array(
      array(   
       'name'=>'customer_name', 
       'value'=>'ucwords($data->first_name.\' \'.$data->last_name)', 
       ),   
      'company_name', 
      'country', 
      'state', 
      'city', 
      'address1', 
      'phone1', 
      'email', 
      array(
       'class'=>'CButtonColumn', 
      ), 
     ), 
    )); ?> 

在创建模型

class Customer extends CActiveRecord 
{ 
    public $customer_name; 
    public function search() 
    {    
     $criteria->compare('CONCAT(first_name, \' \', last_name)',$this->customer_name,true);    
    } 
} 

一个变种,不要忘记在规则中声明新的属性为“安全”()模型的方法,或您的输入将不被视为

public function rules() 
{ 
    return array(
    /* ... */ 
     array('customer_name', 'safe', 'on'=>'search'), 
    ); 
} 
3

第一个变化:

'name'=>'$data->first_name', 

到:

'name'=>'first_name', 

在模型search方法,你将不得不增加LIKE条件:

$model->addSearchCondition('CONCAT(first_name, " ", last_name)', $this->first_name);