如何使用单选按钮在yii中过滤gridview的行

时间:2013-07-24 10:36:47

标签: php javascript yii

我使用以下代码在Yii框架中创建了两个单选按钮(已批准的消息和被拒绝的消息)

<?php echo CHtml::activeRadioButtonList($model, 'Approved', array('Approved Messages', 'Rejected Messages'), array('labelOptions'=>array('style'=>'display:inline'),'separator'=>'')) ?>

现在我必须过滤并显示表格的CGridView中的所有行,当我点击“已批准的邮件”单选按钮时,“已批准”列的值为1 =表格的CGridView中的所有行当我点击“被拒绝的消息”单选按钮时,'有值= 0。我怎么能这样做

Radio Button

2 个答案:

答案 0 :(得分:0)

我使用了一个下拉菜单,值为是和否。只需使用以下代码将approved列翻译成文本:

array(
  'name' => 'approved',
  'value' => '($data->approved ? "Yes" : "No")',
  'filter' = >CHtml::dropDownList('Approved', '',  
            array(
                ' '=>'All',
                '1'=>'On',
                '0'=>'Off',
            )
        ),
)

此链接是我获取此信息的地方:http://www.yiiframework.com/forum/index.php/topic/30694-cgridview-filter-dropdown-from-array/

我使用cgridview filter example

进行了Google搜索

答案 1 :(得分:0)

好吧,让我们放入单选按钮而不是所有下拉菜单哈哈。 我假设您的视图设置如下:

// view/index.php  (or similar)
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>Message::model(),
    'columns'=>
    [
        'id',
        'username',
        'email:email',
        'approved'=>[
            'name'=>'approved',
            'filter'=>$this->approvedFilter(), 
            // I like moving stuff like this out of the way.
            // But maybe it's smarter to put it in your model instead?
        ]
    ]
));

接下来是控制器。

// MessageController.php  (or similar)
public function actionIndex()
{
    $model = Message::model();
    // All we need to do is to assign the incoming value to the model we are using...
    if ( isset( $_GET['Message']['Approved'] )){
        $model->approved = $_GET['Message']['Approved'];
    }

    $this->render('index', ['model'=>$model]);
}

// Oh yeah the filter. I just copied your code.
public function approvedFilter(){
    return CHtml::activeRadioButtonList(
        Message::model(), 'approved',  array(0,1),
        array(
           'labelOptions'=>array('style'=>'display:inline'),
           'separator'=>''
        )
    );
}

此代码已经过测试,但我做了最后一分钟的更改,如果它爆炸了,那就很抱歉! 我仍然认为一个简单的'已批准:布尔'更清洁。 ;)