【问题标题】:Yii1 CGridView(Yii-Booster): How to change filter key(filterVal) in TbGridView(based on CGridView)?Yii1 CGridView(Yii-Booster):如何更改 TbGridView 中的过滤键(filterVal)(基于 CGridView)?
【发布时间】:2016-04-07 04:51:41
【问题描述】:

我正在使用 yii-booster(4.0.1) TbGridView(extends CGridView) 并且需要更改 _REQUEST($_POST, $_GET) 中的过滤器变量名称以获得过滤器功能。 在我的网格中,我有过滤器功能,当我在过滤器输入中输入一些单词后按 Enter 键时,将为服务器发送一个 ajax 请求。在 $_REQUEST 的这个请求中,我有:

array
(
    'page' => '1'
    'wsi_it_model_Asset' => array
    (
        'user' => 'eghlima'
        'createdAt' => ''
        'serial' => ''
        'brand' => ''
        'model' => ''
        'assetType' => ''
        'assigned' => ''
        'location' => ''
        'status' => ''
    )
)

我的问题是如何在 CGridView 创建的请求中更改 wsi_it_model_Asset。 我知道在创建dataProvider时应该通过CActiveDataProvider中的参数来完成,但我找不到它。

提前致谢。

1 月 24 日更新
我从另一个项目中找到了我的代码,如您所见,我可以将key 更改为sortpagination,我需要一些看起来像过滤键的东西;

return new \CActiveDataProvider($this->applicant, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageVar' => 'p', // <<<<< pagination var
                'pageSize' => 20,
            ),
            'sort' => array(
                'sortVar' => 's', // <<<<< sorting var
                'defaultOrder' => 't.firstName ASC',
                'attributes' => array(
                    '*'
                )

            ),
        ));

所以对于分页,从客户端发送到服务器的请求将是:

array
(
    'p' => '7' // <<<<<< page changed to `p`
    'wsi_it_model_Asset' => array
    (
        'user' => 'eghlima'
        'createdAt' => ''
        'serial' => ''
        'brand' => ''
        'model' => ''
        'assetType' => ''
        'assigned' => ''
        'location' => ''
        'status' => ''
    )
)

【问题讨论】:

    标签: php cgridview yii-booster cactivedataprovider yii1.x


    【解决方案1】:

    我不确定你的意思,但我试试看。

    $this->widget('zii.widgets.grid.CGridView', array(
        'id' => 'my-grid',
        'dataProvider' => $model->search(),
        'filter' => $model,
        'columns' => array(
            array(
                'value' => '$data->theValue',
                'filter' => CHtml::activeTextField($model, 'myWish'),
            ),
        )
    ));
    

    然后在你的模型中添加一个虚拟属性

    public function getMyWish()
       {
          return 'Your dream answere';
       }
    

    然后在你的 $model->search() 中添加:

    $criteria->compare('$data->theValue', $this->myWish,true);
    

    类似这样的检查一个非常好的关于虚拟属性的教程:http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

    【讨论】:

    • 不,这不是答案。看;你写道:'filter' => CHtml::activeTextField($model, 'myWish'),当你在 yii1 中使用模型时,它使用元素的类名,在我的例子中,它是带有命名空间 wsi\it\model 的资产,所以 yii1 将选择 wsi_it_model_Asset 作为元素名称和 id 的前缀,并且每当它要发送请求时,所有参数都会以 this 作为前缀。但我敢肯定,应该有一个解决方案来改变这个变量!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多