2017-01-26 31 views
1

我希望gridview中的文本是將此文本發送到同一列的篩選器的鏈接。Yii2 gridview:將屬性值發送到篩選器

到目前爲止,我在做這樣說:

'columns'=>[ 
    ... 
    [ 
    'attribute'=>'colname', 
    'value'=>function($data){ 
     return Html::a($data->colname,Yii::$app->request->url.'&MymodelSearch[colname]='.$data->colname); 
    }, 
    ], 
    ... 
] 

,但它的醜陋,並不總是工作

回答

1
'columns' => [ 
// ... 
[ 
    'attribute' => 'colname', 
    'format' => 'raw', 
    'value' => function ($data, $key, $index, $column) { 
     if ($data->colname) 
      return 
       "<span onclick=\"" 
        . (new \yii\web\JsExpression("setFilterColname('" 
          . Html::encode($data->colname) . "');")) 
       . "\">" 
       . \yii\helpers\Html::encode($data->colname) 
       . "</span>"; 
    } 
// ... 
] 

在視圖文件的底部添加此

<?php 
$this->registerJs(" 
    function setFilterColname(filter_value) { 
     $('input[name=\"MymodelSearch[colname]\"]').val(filter_value); 
     $('#w0').yiiGridView('applyFilter'); 
     // #w0 is ID of grid to be submited to filter 
    } 
", $this::POS_END, 'set-filter-colname'); 
?>