yii2组件之下拉框带搜索功能(yii-select2)

简单的小功能,但是用起来还是蛮爽的。分享出来让更多的人有更快的开发效率,开开心心快乐编程。

如果你还没有使用过composer,你可就out了,看我的教程分享,composer简直就是必备神奇有木有。都说到这个点上了,我们赶紧使用composer进行安装吧。

不急,先来看看效果图是啥样的,不然都没心情没欲望看下去。

啥玩意,不感兴趣?继续看嘛,看完再操作一边才能觉得好在哪里。

有木有感觉很帅气,当然啦,远远不止,还很上档次用起来效果也是杠杠的有木有。

好了好了,抓紧时间安装,不然聊起来真是没完没了。

composer require kartik-v/yii2-widget-select2 "@dev"
#特别说明,因为这里安装的dev版本,也就是开发版本,不稳定版本,如果你的项目是git托管的,composer安装下来之后这里记得删掉 \vendor\kartik-v\yii2-widget-select2目录下的.git文件,不然你提交不上去的哦

等他个大概5分钟的样子差不多了,安装就好了,然后我们就可以像下面一样开始使用了

//如果你的表单是ActiveForm,请使用

use kartik\select2\Select2;
//$data是键值对数组哦,key-value ,下面所声明的所有$data均为键值对数组,以该数组为例
$data = [2 => ‘widget‘, 3 => ‘dropDownList‘, 4 => ‘yii2‘];
echo $form->field($model, ‘title‘)->widget(Select2::classname(), [
    ‘data‘ => $data,
    ‘options‘ => [‘placeholder‘ => ‘请选择 ...‘],
]);

//如果你的表单是非ActiveForm,可以参考下面的

use kartik\select2\Select2;
echo Select2::widget([ ‘name‘ => ‘title‘,
    ‘data‘ => $data,
    ‘options‘ => [‘placeholder‘ => ‘请选择...‘]
]);

#非ActiveFomr生成的更新数据的时候就需要默认选中,好办,加value值即可

use kartik\select2\Select2;
echo Select2::widget([
    ‘name‘ => ‘title‘,
    ‘value‘ => 2,
    ‘data‘ => $data,
    ‘options‘ => [‘placeholder‘ => ‘请选择...‘]
]);
#但是如果你的表单是ActiveForm生成的,但是往往字段不是表字段怎么办呢?更好办啦,以上面的为例,你只需要指定$model->title = [‘title1‘, ‘title2‘];即可

基本上就是这么回事,我们也就很简单的实现了下拉选择并可搜索的功能。但是,咋又冒出来了个但是呢,但是刚才是我们想的,事实是这样的,小编妹子说了,你这能不能操作再方便点,一次选择一个太麻烦了,能不能多选呀?为了实现你那ZB的伎俩,好吧,确实也简单,一行代码解决掉。

echo $form->field($model, ‘title‘)->widget(Select2::classname(), [
    ‘data‘ => $data,
    ‘options‘ => [‘multiple‘ => true, ‘placeholder‘ => ‘请选择 ...‘],
]);
#多选的添加默认值同上

眼尖的注意到了,加了一个multiple选项。非ActiveForm生成的表单操作一致。

我们看看效果是怎么样的。

到此,我们已经可以唱者NB的歌欢快的回家了

等等,好像忘记什么了,有眼尖的小伙伴可能注意到了,$data都是我们预先准备好的数据,你说这数据量万一很大的情况,不搞死人了嘛,那接下来让我们看看如何实现异步搜索结果。举一个例子,我们现在要查询某一个书名,但是我们的书的数据量大概有100W,很简单,这需要我们根据你的搜索结果异步获取下拉框里面的数据。未完待续,晚点做进一步说明。

华丽的分割线



来,上家伙,我们来看看如何使用异步搜索功能,工作中尤其是进行关联数据的时候其用途更是大大的,方便性嘛,看看就知道了,好用的不得了。

基本的使用方法就不多说了,请看官们移步上文,我们这里继续接着大侃大论。

我们先来预览下异步搜索的效果图

注意哦,图中标记的部分是我们通过输入的关键词搜索出来的,异步这效果呢,我截图上来估计你也看不到效果,动图我还不会,不知道怎么搞的,要说具体是啥效果吗,相信大多数人也是明白滴,这就叫做只可意会,言谈不出来。好了,我们干脆直接上代码看具体操作吧。

// view层
use kartik\select2\Select2;
use yii\web\JsExpression;

<?php
    echo $form->field($model, ‘title‘)->widget(Select2::classname(), [
        ‘options‘ => [‘placeholder‘ => ‘请输入标题名称 ...‘],
        ‘pluginOptions‘ => [
            ‘placeholder‘ => ‘search ...‘,
            ‘allowClear‘ => true,
            ‘language‘ => [
                ‘errorLoading‘ => new JsExpression("function () { return ‘Waiting...‘; }"),
            ],
            ‘ajax‘ => [
                ‘url‘ => ‘这里是提供数据源的接口‘,
                ‘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; }‘),
        ],
    ]);
?>

上面的代码可直接复制使用,唯独需要修改的就是ajax里对应的url地址。下面我们看看controller层代码是怎么提供数据的。

//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;
}
时间: 2024-10-30 10:28:23

yii2组件之下拉框带搜索功能(yii-select2)的相关文章

多选下拉框带搜索(aps.net)

自己写了一个带搜索功能的多选下拉框,为了要获取值,就没有封装插件,实现思路 1.一个文本框 做搜索 2.一个文本框显示选中文本,一个隐藏控件存值 3.一个div里面绑定CheckBoxList控件(这里,你也可以请求后直接插入checkbox) 代码 1.一个变量把div的html存起来 2.选中就加到文本框,取消就减掉 //选中记录,反选删除 $("#divChkList :checkbox").each(function () { $(this).click(function ()

bootstrap-select 多选下拉框 带搜索

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>下拉多选</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.2/css/bo

java简单的实现搜索框的下拉显示相关搜索功能

最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索 先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来 搜索框相关搜索的展示很简单,就是根据你的搜索词,去数据库中匹配,是否有类似的搜索词存在,按照搜索词被搜索的次数进行排序显示出来 我设计的是每次搜索一个词,提交之后都会去数据库进行查询,看是否存在这个搜索词的搜索,若存在,则对数据库中的这个搜索词对象进行次数加1,不存在,则创建这个新搜索词对象,保存在

JS为Select下拉框增加输入功能

JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于select之上,再使用JS将下拉框的值赋值给input,实际上是用input模拟出了select的功能,思路很新颖,也不知到底有多少人需要select可输入文字的功能,下面是详细的实现代码:前端资源分享 .代码   <div style="position:relative;">

yii2 html下拉框

下拉框 带默认值 <?php $form=ActiveForm::begin(); echo $form->field($model,'uname', ['inputOptions'=>['class'=>'myway'], 'template'=>'<span>{label}</span>{input}']) ->dropDownList(ArrayHelper::map(array(['uid'=>1,'uname'=>'xm']

Python自动化之下拉框,隐藏标签定位 代码&报错解决

python自动化:下拉框定位方法之select标签 style="display: none;"报错selenium.common.exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated 界面源码:(禅道为例)排查:1)因为是隐藏的,需要操作其可见才可定位 2)若还是无法定位,请查看前

让Jayrock插上翅膀(加入输入输出参数注释,测试页面有注释,下拉框可以搜索)

继上一篇文章介绍了Jayrock组件开发接口的具体步骤和优缺点之后,今天给大家带来的就是,如何修复这些缺点. 首先来回顾一下修复的缺点有哪些: 1.每个接口的只能写大概的注释,不能分开来写,如接口的主要功能,输入的参数是什么意思,输出的字段是什么意思. 2.测试页面中,针对每个接口的功能注释是没有的,这样非常不方便,因为接口一多,开发人员很难快速的定位要使用的接口. 3.测试页面中,选择的下拉框不能输入搜索,只能一个个选择,接口一多,绝对是个悲剧的活. 那么下面就展示我是如何修复这些缺点的: 1

JS为Select下拉框添加输入功能

JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于select之上,再使用JS将下拉框的值赋值给input,实际上是用input模拟出了select的功能,思路非常新颖,也不知究竟有多少人须要select可输入文字的功能,以下是具体的实现代码:前端资源分享 .代码   <div style="position:relative;">

下拉框的搜索(有图,适用下拉选择内容较多,需要搜索,自动联想)

由于下拉菜单选项较多,需要在下拉菜单中加入搜索功能,而且具有搜索词联想功能.本文采用了select2.js插件,在引入后简单配置就可以使用 view中 AppAsset::register($this); //引入select2插件实现下拉搜索功能 AppAsset::addScript($this,"js/plugins/select2-master/dist/js/select2.min.js"); AppAsset::addScript($this,"js/plugin