TbGridView设置过滤器下拉html属性


Yii TbGridView set filter dropdown html attributes

我不知道如何设置过滤器下拉列表的id属性。

下面是定义小部件的视图代码。

$this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'view-grid',
'enableHistory'=>true,
'dataProvider'=>$model->search(),
'summaryText'=>"",
'filter'=>$model,
'columns'=>array(
    array('name'=>'v_id','htmlOptions'=>array('style'=>'width: 60px')),
    array('name'=>'v_parent_view','htmlOptions'=>array('style'=>'width: 20%'),'value'=>'$data->vParent->v_name'),
    array('name'=>'v_name','type'=>'raw','value'=>function($data,$row) {
        if(isset($data->vLatestVersion[0]->vv_id) && $data->vLatestVersion[0]->vv_id) {
            return CHtml::link($data->v_name,array("viewVersion/update","id"=>$data->vLatestVersion[0]->vv_id));
        } else {
            return CHtml::link($data->v_name,array("viewVersion/create","vid"=>$data->v_id));
        }
    }),
    array('name'=>'v_date_modified', 'type'=>'raw', 'htmlOptions'=>array('style'=>'width: 110px'), 'value'=>function($data, $row) {
        return $data->modified_since . '<br/><span class="timeago">'.$data->vUserModified->username.'</span>';
    }),
    array(
        'name'=>'v_status',
        'value'=>'$data->getStatusName()',
        'filter'=>Yii::app()->params['globalDmpLookups']['generalStatus'],
        'filterHtmlOptions'=>array('id'=>'sel_status'),
        'htmlOptions'=>array('style'=>'width: 60px'),
    )
),

));

接近结尾的代码行有'filterHtmlOptions'是我尝试过的,但它不起作用。如有任何帮助,我将不胜感激。

我的下拉菜单渲染的html应该是这样的:

<select id="sel_status" name="View[v_status]">...</select>

但遗憾的是它看起来是这样的:

<select name="View[v_status]">...</select>

我发现我试图在我的列表过滤器中错误地使用下拉列表为status = Active/Disabled。按照Yii的方式来做这个很简单,只需像这样设置模型…

public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.
    $criteria=new CDbCriteria;
    $criteria->with = array('ggUserModified'); // specify relationship
    $criteria->compare('gg_id',$this->gg_id);
    $criteria->compare('gg_class',$this->gg_class,true);
    $criteria->compare('gg_name',$this->gg_name,true);
    $criteria->compare('gg_title',$this->gg_title,true);
    $criteria->compare('gg_description',$this->gg_description,true);
    $criteria->compare('gg_date_modified',$this->gg_date_modified,true);
    $criteria->compare('gg_status',$this->gg_status);
    $criteria->compare('User.username',$this->gg_user_modified_rel,true); // use table alias name and specify relationship field property
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'sort'=>array(
            'attributes'=>array(
                'gg_user_modified_rel' => array( // specify relationship field property
                    'asc'=>'User.username', // specify table alias name
                    'desc'=>'User.username DESC', // specify table alias name
                ),
                '*',
            ),
        ),
    ));
}

…然后像这样设置视图…

<?php $this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'gallery-group-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'gg_id',
    'gg_name',
    array(
        'name'=>'gg_user_modified_rel', // specify relationship field property
        'value'=>'$data->ggUserModified->username' // specify relationship name
    ),
    'gg_date_modified',
    array(
        'name'=>'gg_status',
        'value'=>'$data->getStatusName()',
        'filter'=>Yii::app()->params['globalDmpLookups']['generalStatus'],
        'htmlOptions'=>array('style'=>'width: 120px'),
    ),
    array('header'=>'Item Count','value'=>'$data->ggChildCount'),
    array(
        'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
),)); ?>

filterHtmlOptions是表行元素的HTML选项,而不是输入。

Yii::app()->params['globalDmpLookups']['generalStatus']的值是多少?如果你想设置过滤器下拉菜单的id属性,设置下拉菜单上的HTML属性。

例如:

// ..
'columns'=>array(
    array(
        'name' => 'majorId',
        'filter' => CHtml::activeDropDownList($model, 'majorId', CHtml::listData(
            Major::model()->findAll(), "id", "name"), 
            array(
                'empty' => '=== Pilih Jurusan ===',
                'id' => 'YOUR_ID'
            )
        ),
    ),
),
// ..