首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aii2-如何在网格视图中添加搜索框

Aii2-如何在网格视图中添加搜索框
EN

Stack Overflow用户
提问于 2017-12-28 15:45:32
回答 1查看 3.4K关注 0票数 0

我是Yii-2的新手。我在我的索引页面中有一个网格视图,其中一些条目正在显示。

代码语言:javascript
复制
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        //'meter_id',

        [
            'label' => 'Meter MSN',
            'value' => function ($d) {
                return $d->meter->meter_msn;
            },
           // 'filter' => Html::activeDropDownList($searchModel, 'meter_id', \app\models\Meters::toArrayList(), ['prompt' => "All Meters", 'class' => 'form-control']),

        ],
        'imsi',
        'telecom',
        'status',
        [
            'label' => 'Created By',
            'value' => function ($data) {
                if (is_object($data))
                    return $data->created->name;
                return ' - ';
            },
            //'filter' => Html::activeDropDownList($searchModel, 'created_by', \app\models\User::toArrayList(), ['prompt' => "Created By", 'class' => 'form-control']),
        ],
        'comments',
        'historic',


        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

现在我想添加一个针对Meter MSN的搜索框。在上面的代码中,过滤器是隐藏的,所以它是有效的,但我不想添加一个下拉列表,而是想要一个搜索框。

下面是我的搜索类

代码语言:javascript
复制
public function search($params)
{
    $query = MetersInventoryStore::find();

    // add conditions that should always apply here

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'meter_id' => $this->meter_id,
        'created_by' => $this->created_by,
        'updated_by' => $this->updated_by,
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
        'store_id' => $this->store_id,
        'meter_serial'=>$this->meter_serial,
        //            'historic' => $this->historic,
        'status'=>'SIM Installed',

    ])
      //  ->orFilterWhere(['status'=>'Communication Failed'])
    ;

    //       $query->andFilterWhere(['like', 'meter_serial', $this->meter_serial])
    //        ->andFilterWhere(['like','meter_id',$this->meter_id]);
    $query->orderBy(['id' => SORT_DESC]);
    return $dataProvider;
}

如何在其中放置搜索框?因为simple search类将在默认情况下设置搜索功能。但是我的MSN值来自一个函数,所以我不知道如何放置一个搜索框。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-28 18:20:22

对于在计算列中添加筛选器字段,您应该在搜索模型中添加一个公共变量

代码语言:javascript
复制
public function search($params)
{
    public $your_column;

   // declare as safe 
   public function rules()
   {
    return [
       ...
        [[  'your_column', ], 'safe'],

    ];
   }

   $query = MetersInventoryStore::find();

然后在grid_view中引用your_column

代码语言:javascript
复制
 ...
 'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    //'meter_id',

    [
        'attribute' => 'your_column',
        'label' => 'Meter MSN',
        'value' => function ($d) {
            return $d->meter->meter_msn;
        },
    ],

最后是您的searchModel,您必须扩展您的筛选条件,以便根据您传递的筛选器值正确地管理您的计算列。

您可以在本教程http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/中找到一些示例

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48003615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档