从 CgridView Filter -Yii1 中的过滤器中删除空选项

To remove empty option from filter in CgridView Filter -Yii1

我想删除列表数据值的空或第一个选项。我有 FruitList 模型,它有一个列表,所以我需要防止用户 select all.

但现在的问题是可以让用户select所有水果的空选项,所以我该如何删除。

这是我的代码

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(

         array(
            'header' => 'Buyer',
            'name' => 'Buyer',
            'value' => 'customer_name',
            'filter' => $fruits
        ),
        array(
            'header' => 'Fruits',
            'name' => 'fruit_id',
            'value' => '$data->Buyers->FruitList->Name',
            'filter' => $fruits
        ),
        array(            
            'class'=>'CButtonColumn',
        ),
    ),
));

您可以在 dataProvider 中设置条件,因此它 return 您的结果不为空 value.for 示例 $dataProvider->criteria->addCondition('fruit_id IS NOT NULL '); 我希望它的工作!

默认情况下,CGridView 的过滤器呈现带有空选项的下拉列表,以允许禁用过滤。但是您可以通过提供自己的下拉列表作为过滤器来覆盖此行为:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(

         array(
            'header' => 'Buyer',
            'name' => 'Buyer',
            'value' => 'customer_name',
            'filter' => CHtml::activeDropDownList($model, 'customer_name', $fruits),
        ),
        array(
            'header' => 'Fruits',
            'name' => 'fruit_id',
            'value' => '$data->Buyers->FruitList->Name',
            'filter' => CHtml::activeDropDownList($model, 'fruit_id', $fruits)
        ),
        array(            
            'class'=>'CButtonColumn',
        ),
    ),
));

确保您在模型中为这些过滤器设置了默认值 - 在您的控制器中是这样的:

// ...
$model->fruit_id = FruitList::DEFAULT_ID;
$model->customer_name = FruitList::DEFAULT_ID;
if (isset($_GET['FruitList'])) {
    $model->setAttributes($_GET['FruitList']);
}
$dataProvider = $model->search();
// ...