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

Yii2 整合 Select2 (kartik-v/yii2-widget-select2) 實現下拉框搜索、多選、遠程加載

     編輯:PHP 綜合知識

原生 <select> 在選項超過 20 條時體驗極差。Yii2 生態首選 kartik-v/yii2-widget-select2,封裝 jQuery Select2 4.x,支援本地搜索、AJAX 遠程加載、多選標籤、模板自定義等企業級功能。

安裝

composer require kartik-v/yii2-widget-select2 "*"

引入

use kartik\select2\Select2;
use yii\helpers\ArrayHelper;

基礎用法:本地數據 + 搜索 + 清除

<?= $form->field($model, 'companies_company_id')->widget(Select2::classname(), [
    'data' => ArrayHelper::map(Companies::find()->all(), 'company_id', 'company_name'),
    'language' => 'en',
    'options' => ['placeholder' => 'Select a company ...', 'multiple' => false],
    'pluginOptions' => [
        'allowClear' => true,              // 顯示清除按鈕
        'minimumInputLength' => 1,         // 輸入 1 字符開始搜索
    ],
]) ?>

進階:AJAX 遠程加載(大數據量必備)

<?= $form->field($model, 'user_id')->widget(Select2::classname(), [
    'options' => ['placeholder' => '搜索用戶...', 'multiple' => true],
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 2,
        'ajax' => [
            'url'      => \yii\helpers\Url::to(['user/search']),
            'dataType' => 'json',
            'data'     => new \yii\web\JsExpression('function(params) { return {q: params.term, page: params.page}; }'),
            'processResults' => new \yii\web\JsExpression('function(data) { return {results: data.items, pagination: {more: data.more}}; }'),
        ],
        'templateResult' => new \yii\web\JsExpression('function(item) { return item.text; }'),
        'templateSelection' => new \yii\web\JsExpression('function(item) { return item.text; }'),
    ],
]) ?>

控制器 actionSearch 返回格式:

return Json::encode([
    'items' => array_map(function($u){ return ['id'=>$u->id, 'text'=>$u->username]; }, $users),
    'more'  => count($users) >= 20,
]);

常用 pluginOptions 速查

選項說明
allowClear可清除選擇
multiple多選模式(標籤顯示)
tags允許創建新標籤(配合 createTag)
maximumSelectionLength限制最多選幾項
minimumInputLength觸發搜索最少字符數
dropdownAutoWidth下拉框自適應寬度
theme主題:default, bootstrap, classic
language語言包(需對應文件)
placeholder佔位符(也可在 options 中設定)
escapeMarkup關閉 HTML 轉義(自定義模板時需設為 false)

完整演示地址

https://demos.krajee.com/widget-details/select2 — 含單選、多選、AJAX、標籤、模板、主題等 20+ 實例。


Select2 + Yii2 = 企業級下拉選擇體驗。記住:**大數據必須走 AJAX**,前端只渲染可見選項,後端分頁返回,前後端分工明確才能支撐萬級選項無卡頓。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved