yii2組件之下拉框帶搜索功能的示例代碼(yii-select2)
簡(jiǎn)單的小功能,但是用起來(lái)還是蠻爽的。分享出來(lái)讓更多的人有更快的開(kāi)發(fā)效率,開(kāi)開(kāi)心心快樂(lè)編程。
如果你還沒(méi)有使用過(guò)composer,你可就out了,看我的教程分享,composer簡(jiǎn)直就是必備神奇有木有。都說(shuō)到這個(gè)點(diǎn)上了,我們趕緊使用composer進(jìn)行安裝吧。
不急,先來(lái)看看效果圖是啥樣的,不然都沒(méi)心情沒(méi)欲望看下去。
啥玩意,不感興趣?繼續(xù)看嘛,看完再操作一邊才能覺(jué)得好在哪里。
有木有感覺(jué)很帥氣,當(dāng)然啦,遠(yuǎn)遠(yuǎn)不止,還很上檔次用起來(lái)效果也是杠杠的有木有。
好了好了,抓緊時(shí)間安裝,不然聊起來(lái)真是沒(méi)完沒(méi)了。
composer require kartik-v/yii2-widget-select2 "@dev"
特別說(shuō)明,因?yàn)檫@里安裝的dev版本,也就是開(kāi)發(fā)版本,不穩(wěn)定版本,如果你的項(xiàng)目是git托管的,composer安裝下來(lái)之后這里記得刪掉 \vendor\kartik-v\yii2-widget-select2目錄下的.git文件,不然你提交不上去的哦
等他個(gè)大概5分鐘的樣子差不多了,安裝就好了,然后我們就可以像下面一樣開(kāi)始使用了
//如果你的表單是ActiveForm,請(qǐng)使用 use kartik\select2\Select2; //$data是鍵值對(duì)數(shù)組哦,key-value ,下面所聲明的所有$data均為鍵值對(duì)數(shù)組,以該數(shù)組為例 $data = [2 => 'widget', 3 => 'dropDownList', 4 => 'yii2']; echo $form->field($model, 'title')->widget(Select2::classname(), [ 'data' => $data, 'options' => ['placeholder' => '請(qǐng)選擇 ...'], ]);
//如果你的表單是非ActiveForm,可以參考下面的 use kartik\select2\Select2; echo Select2::widget([ 'name' => 'title', 'data' => $data, 'options' => ['placeholder' => '請(qǐng)選擇...'] ]);
非ActiveFomr生成的更新數(shù)據(jù)的時(shí)候就需要默認(rèn)選中,好辦,加value值即可
use kartik\select2\Select2; echo Select2::widget([ 'name' => 'title', 'value' => 2, 'data' => $data, 'options' => ['placeholder' => '請(qǐng)選擇...'] ]);
但是如果你的表單是ActiveForm生成的,但是往往字段不是表字段怎么辦呢?更好辦啦,以上面的為例,你只需要指定$model->title = ['title1', 'title2'];即可
基本上就是這么回事,我們也就很簡(jiǎn)單的實(shí)現(xiàn)了下拉選擇并可搜索的功能。但是,咋又冒出來(lái)了個(gè)但是呢,但是剛才是我們想的,事實(shí)是這樣的,小編妹子說(shuō)了,你這能不能操作再方便點(diǎn),一次選擇一個(gè)太麻煩了,能不能多選呀?為了實(shí)現(xiàn)你那ZB的伎倆,好吧,確實(shí)也簡(jiǎn)單,一行代碼解決掉。
echo $form->field($model, 'title')->widget(Select2::classname(), [ 'data' => $data, 'options' => ['multiple' => true, 'placeholder' => '請(qǐng)選擇 ...'], ]); #多選的添加默認(rèn)值同上
眼尖的注意到了,加了一個(gè)multiple選項(xiàng)。非ActiveForm生成的表單操作一致。
我們看看效果是怎么樣的。
到此,我們已經(jīng)可以唱者NB的歌歡快的回家了
等等,好像忘記什么了,有眼尖的小伙伴可能注意到了,$data都是我們預(yù)先準(zhǔn)備好的數(shù)據(jù),你說(shuō)這數(shù)據(jù)量萬(wàn)一很大的情況,不搞死人了嘛,那接下來(lái)讓我們看看如何實(shí)現(xiàn)異步搜索結(jié)果。舉一個(gè)例子,我們現(xiàn)在要查詢某一個(gè)書(shū)名,但是我們的書(shū)的數(shù)據(jù)量大概有100W,很簡(jiǎn)單,這需要我們根據(jù)你的搜索結(jié)果異步獲取下拉框里面的數(shù)據(jù)。未完待續(xù),晚點(diǎn)做進(jìn)一步說(shuō)明。
來(lái),上家伙,我們來(lái)看看如何使用異步搜索功能,工作中尤其是進(jìn)行關(guān)聯(lián)數(shù)據(jù)的時(shí)候其用途更是大大的,方便性嘛,看看就知道了,好用的不得了。
基本的使用方法就不多說(shuō)了,請(qǐng)看官們移步上文,我們這里繼續(xù)接著大侃大論。
我們先來(lái)預(yù)覽下異步搜索的效果圖
注意哦,圖中標(biāo)記的部分是我們通過(guò)輸入的關(guān)鍵詞搜索出來(lái)的,異步這效果呢,我截圖上來(lái)估計(jì)你也看不到效果,動(dòng)圖我還不會(huì),不知道怎么搞的,要說(shuō)具體是啥效果嗎,相信大多數(shù)人也是明白滴,這就叫做只可意會(huì),言談不出來(lái)。好了,我們干脆直接上代碼看具體操作吧。
// view層 use kartik\select2\Select2; use yii\web\JsExpression; <?php echo $form->field($model, 'title')->widget(Select2::classname(), [ 'options' => ['placeholder' => '請(qǐng)輸入標(biāo)題名稱 ...'], 'pluginOptions' => [ 'placeholder' => 'search ...', 'allowClear' => true, 'language' => [ 'errorLoading' => new JsExpression("function () { return 'Waiting...'; }"), ], 'ajax' => [ 'url' => '這里是提供數(shù)據(jù)源的接口', 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(res) { return res.text; }'), 'templateSelection' => new JsExpression('function (res) { return res.text; }'), ], ]); ?>
上面的代碼可直接復(fù)制使用,唯獨(dú)需要修改的就是ajax里對(duì)應(yīng)的url地址。下面我們看看controller層代碼是怎么提供數(shù)據(jù)的。
//controller層 public function actionSearchTitle ($q) { \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $out = ['results' => ['id' => '', 'text' => '']]; if (!$q) { return $out; } $data = Article::find() ->select('id, title as text') ->andFilterWhere(['like', 'title', $q]) ->limit(50) ->asArray() ->all(); $out['results'] = array_values($data); return $out; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
以實(shí)例全面講解PHP中多進(jìn)程編程的相關(guān)函數(shù)的使用
這篇文章主要介紹了以實(shí)例全面講解PHP中多進(jìn)程編程的相關(guān)函數(shù)的使用,包括對(duì)僵尸進(jìn)程的處理等方面,極力推薦!需要的朋友可以參考下2015-08-08Thinkphp結(jié)合ajaxFileUpload實(shí)現(xiàn)ajax異步圖片傳輸全套代碼
這篇文章主要介紹了Thinkphp結(jié)合ajaxFileUpload實(shí)現(xiàn)ajax異步圖片傳輸全套代碼的相關(guān)資料,需要的朋友可以參考下2023-03-03Symfony2框架學(xué)習(xí)筆記之HTTP Cache用法詳解
這篇文章主要介紹了Symfony2框架HTTP Cache用法,結(jié)合實(shí)例形式分析了Symfony框架HTTP緩存的相關(guān)使用技巧,需要的朋友可以參考下2016-03-03Thinkphp 在api開(kāi)發(fā)中異常返回依然是html的解決方式
今天小編就為大家整理了一篇Thinkphp 在api開(kāi)發(fā)中異常返回依然是html的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10關(guān)于DISCUZ不用通行證登陸得內(nèi)容介紹
DISCUZ是中國(guó)最常用的論壇,雖然他本身有通行證給大家連接,但實(shí)際上用戶的統(tǒng)一還是很不好,經(jīng)常要建立兩個(gè)用戶表,第一不利于注冊(cè)和管理,第二浪費(fèi)數(shù)據(jù)庫(kù)。2008-10-10ThinkPHP框架獲取最后一次執(zhí)行SQL語(yǔ)句及變量調(diào)試簡(jiǎn)單操作示例
這篇文章主要介紹了ThinkPHP框架獲取最后一次執(zhí)行SQL語(yǔ)句及變量調(diào)試簡(jiǎn)單操作,結(jié)合實(shí)例形式分析了thinkPHP獲取最后一次執(zhí)行SQL語(yǔ)句的getLastSql()及fetchSql()函數(shù)以及使用dump方法變量調(diào)試、E方法輸出錯(cuò)誤信息等操作技巧,需要的朋友可以參考下2018-06-06