Php 如何在yii中的自定义gridview中添加过滤器选项?

Php 如何在yii中的自定义gridview中添加过滤器选项?,php,yii,Php,Yii,我已经为自定义查询创建了网格视图。它对我来说运行良好,我必须在其中添加过滤器,但这对我不起作用。如何在其中添加过滤器? 这是我的全部代码 控制器:DealController.php public function actionAdmin() { $filtersForm=new FiltersForm; if (isset($_GET['FiltersForm'])) $filtersForm->filter

我已经为自定义查询创建了网格视图。它对我来说运行良好,我必须在其中添加过滤器,但这对我不起作用。如何在其中添加过滤器? 这是我的全部代码
控制器:DealController.php

public function actionAdmin() {
            $filtersForm=new FiltersForm;
            if (isset($_GET['FiltersForm']))
                $filtersForm->filters=$_GET['FiltersForm'];
            $sql = 'SELECT d.DealID,d.PromoCode,d.Title,d.Image,d.Description,
                    d.TOC,d.DealCategoryID,d.Discount,d.ValidityStart,d.ValidityEnd,
                    d.MerchantID,dc.CategName,pt.TierName,m.StoreName,
                    CASE WHEN d.DealType = 1 THEN "Normal" 
                    WHEN d.DealType = 2 THEN "Birthday Special" 
                    WHEN d.DealType = 3 THEN "Registration Deal"  END AS DealType,
                    CASE WHEN d.Status = 1 THEN "Active" ELSE  "InActive"  END AS Status,
                    c.CategName AS MerchantCategory
                    FROM deal AS d
                    LEFT JOIN merchant AS m
                    ON m.MerchantID = d.MerchantID
                    LEFT JOIN category AS c
                    ON m.SubCategoryID = c.CategID
                    LEFT JOIN dealcategory AS dc
                    ON dc.CategID = d.DealCategoryID
                    LEFT JOIN dealpermission AS dp
                    ON dp.DealID  = d.dealID
                    LEFT JOIN programtier AS pt
                    ON pt.TierID = dp.TierID
                    GROUP BY DealID';
            $rawData = Yii::app()->db->createCommand($sql);
            $rawDataWithArray = Yii::app()->db->createCommand($sql)->queryAll();
            $filteredData=$filtersForm->filter($rawDataWithArray);
            $count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM (' . $sql . ') as count_alias')->queryScalar(); 
            $model = new CSqlDataProvider($rawData, array( 
                        'keyField' => 'DealID', 
                        'totalItemCount' => $count,
                        'sort' => array(
                            'attributes' => array(
                                'DealID','Merchant Category','Title','Image','Description',
                                'TOC','DealCategoryID','Discount','ValidityStart','ValidityEnd',
                                'DealType','MerchantID','Status','CategName','TierName','StoreName'
                            ),
                            'defaultOrder' => array(
                                'DealID' => CSort::SORT_DESC, 
                            ),
                        ),
                        'pagination' => array(
                            'pageSize' => 10,
                        ),
                    ));



            $this->render('admin', array(
        'model' => $model,'filtersForm' => $filtersForm,
    ));
}
视图:Admin.php

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'deal-grid',
'dataProvider' => $model,
    'ajaxUpdate' => true,
'filter'=>$filtersForm,
'columns' => array(
            array('header'=>'Title',
                  'value'=>'$data["Title"]',
                   'filter' => true,
            ), 
            array(
                    'header' => 'Image',
                    'value' => function($data) {
                               if($data['Image'] != '') {
                                   return '<img src="'.Yii::app()->baseUrl.'/upload/deal/logo/'.$data['Image'].'" width="50" height="50"  >';
                               }          
                    },
                    'type' => 'raw',
                    'filter' => true,        
            ),
            array('header'=>'Merchant Category',
                  'value'=>'$data["MerchantCategory"] !="" ? $data["MerchantCategory"] : null',
                   'filter' => true, 
            ),                
            array('header'=>'Merchant Name',
                  'value'=>'$data["StoreName"] !="" ? $data["StoreName"] : null',
                   'filter' => true, 
            ),
            array('header'=>'Promo Code',
                  'value'=>'$data["PromoCode"] !="" ? $data["PromoCode"] : null',
            ),                
            //'Description',                
             array (
                        'header' => 'Validity Start',
                        'value' => ' $data["ValidityStart"]!="0000-00-00 00:00:00" ? date("d-m-Y H:i:s",strtotime($data["ValidityStart"])) : null ',   
            ), 
            array (
                        'header' => 'Validity End',
                        'value' => ' $data["ValidityEnd"]!="0000-00-00 00:00:00" ? date("d-m-Y H:i:s",strtotime($data["ValidityEnd"])) : null  ',   
            ),  
            array (
                    'header' => 'Membership Tier',
                    'value'=>' $data["TierName"]!="" ? $data["TierName"] : null ',
            ),
            array (
                    'header' => 'Is Birthday Deal',
                    'value'=>' $data["DealType"]=="Birthday Special" ? "Yes" : "No" ',
            ),                
            array (
                           'header' => 'Status',
                           'value' =>  function($data) {
                                  $status = $data["Status"];
                                  if($status == 'Active') {
                                      $statusClass = 'gridStatusSuccess';
                                      $statusId = 2;
                                      $title = "InActive";
                                  } else if($status == 'InActive') {
                                      $statusClass = 'gridStatusError';
                                      $statusId = 1;
                                      $title = "Active";
                                  }
                                  return '<span style="cursor:pointer" id="status-'.$data["DealID"].'" title="Click to '.$title.'" class="'.$statusClass.'" onclick="updateStatus('.$data["DealID"].','.$statusId.');">'.$status.'</span>
                                          <img src="'.yii::app()->baseUrl.'/themes/abound/img/loading.gif" id="loading-'.$data["DealID"].'" style="display:none;width:25px;height:25px;" />';
                           },
                           //'filter' => $model->getStatus(),
                           'type' => 'raw'        
            ),    
             array( 
                'class' => 'CButtonColumn',
                'template' => '{update}{view}',
                'buttons' => array(
                    'update' => array('url' => '$this->grid->controller->createUrl("update",array("id"=>$data["DealID"]))'),
                    'view' => array('url' => '$this->grid->controller->createUrl("view",array("id"=>$data["DealID"]))'),
                ),
            ),          

您可以使用线下CGridview小部件数组

public function rules()
{
    return array(
        array('Title, StoreName, PromoCode, 'safe', 'on'=>'search'),
        );

}

public function search()
{

    $criteria=new CDbCriteria;


    $criteria->compare('Title',$this->Title);
    $criteria->compare('StoreName',$this->StoreName,true);
    $criteria->compare('PromoCode',$this->PromoCode,true);


    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
获取有关使用筛选器的更多详细信息

如果要使用“标题、店名、促销代码”属性进行筛选,请在模型中添加以下内容

注意:添加过滤器需要使用的所有字段


搜索仅显示标题,对于其他字段,它不显示任何内容除了“filter”=>“hello”使用“filter”=>true外,请为所有列设置此值,仅当“title”时,它才起作用,对于其他字段,我添加了'filter'=>true,但它仍然不起作用更新您当前的问题代码,以便我可以找出问题所在您根本没有在字段中获取搜索框?还是不过滤结果?
 'filter'=>$filtersForm,
public function rules()
{
    return array(
        array('Title, StoreName, PromoCode, 'safe', 'on'=>'search'),
        );

}

public function search()
{

    $criteria=new CDbCriteria;


    $criteria->compare('Title',$this->Title);
    $criteria->compare('StoreName',$this->StoreName,true);
    $criteria->compare('PromoCode',$this->PromoCode,true);


    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}