具體怎么實現喃?考慮到一張數據表要下拉效果的字段可能有很多個,我們先在其model中實現一個方法方便后續操作
/**
* 下拉篩選
* @column string 字段
* @value mix 字段對應的值,不指定則返回字段數組
* @return mix 返回某個值或者數組
*/
public static function dropDown ($column, $value = null)
{
$dropDownList = [
'is_delete'=> [
'0'=>'顯示',
'1'=>'刪除',
],
'is_hot'=> [
'0'=>'否',
'1'=>'是',
],
//有新的字段要實現下拉規則,可像上面這樣進行添加
// ......
];
//根據具體值顯示對應的值
if ($value !== null)
return array_key_exists($column, $dropDownList) ? $dropDownList[$column][$value] : false;
//返回關聯數組,用戶下拉的filter實現
else
return array_key_exists($column, $dropDownList) ? $dropDownList[$column] : false;
}
然后我們上代碼看看具體怎么實現的下拉搜索
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
// ......
[
'attribute' => 'is_hot',
'value' => function ($model) {
return Article::dropDown('is_hot', $model->is_hot);
},
'filter' => Article::dropDown('is_hot'),
],
[
'attribute' => 'is_delete',
'value' => function ($model) {
return Article::dropDown('is_delete', $model->is_delete);
},
'filter' => Article::dropDown('is_delete'),
],
// ......
],
]); ?>
像這樣,我們就簡單地實現了兩個下拉效果,要實現篩選功能,在你的dataProvider自定添加該字段的搜索條件即可。