首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii2 GridView 下拉式搜尋完整實作教學

     編輯:PHP 相關知識

Yii2 GridView 下拉式搜尋完整實作教學

GridView 內建的欄位篩選預設為文字輸入框,若欄位值為固定枚舉(如狀態、類別),改為下拉選單能大幅提升使用體驗並減少輸入錯誤。本文示範在 Model 封裝選項、GridView 設定 filter 與 value、SearchModel 加入查詢條件的完整流程。

步驟 1:Model 定義靜態選項方法

 ['0' => '否', '1' => '是'],
            'is_delete' => ['0' => '顯示', '1' => '刪除'],
            'status'    => ['0' => '草稿', '1' => '發布', '2' => '下架'],
        ];
        if ($value !== null) {
            return $list[$column][$value] ?? '';
        }
        return $list[$column] ?? [];
    }
}
?>

步驟 2:GridView 欄位設定 filter 與 value

 $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        [
            'attribute' => 'is_hot',
            'value' => fn($model) => Article::dropdown('is_hot', $model->is_hot),
            'filter' => Article::dropdown('is_hot'),
        ],
        [
            'attribute' => 'is_delete',
            'value' => fn($model) => Article::dropdown('is_delete', $model->is_delete),
            'filter' => Article::dropdown('is_delete'),
        ],
        // 更多欄位...
    ],
]);
?>

步驟 3:SearchModel 加入查詢條件

 $query, 'pagination' => ['pageSize' => 20]]);

        $this->load($params);
        if (!$this->validate()) return $dataProvider;

        // 文字模糊搜尋
        $query->andFilterWhere(['like', 'title', $this->title]);
        // 枚舉精確搜尋
        $query->andFilterWhere(['is_hot' => $this->is_hot]);
        $query->andFilterWhere(['is_delete' => $this->is_delete]);

        return $dataProvider;
    }
}
?>

進階:動態從資料庫載入選項

若選項需由資料庫維護(如分類表),可改用 ArrayHelper::map():

asArray()->all(), 'id', 'name');
}

// GridView
['attribute' => 'cate_id', 'filter' => Article::categoryDropdown(), 'value' => 'cate.name'],
?>

常見問題排查

現象可能原因解決方式
下拉選單不顯示filter 回傳非陣列確認 dropdown() 回傳格式為 ['value' => 'label']
搜尋無效果SearchModel 未載入參數檢查 $this->load($params) 並驗證規則
PJAX 重整後選單消失JS 事件未重新綁定使用 Pjax::end() 並確保 GridView 在 PJAX 容器內
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved