yii2中dropDownList实现二级和三级联动写法


Posted in PHP onApril 26, 2017

整理文档,搜刮出一个yii2中dropDownList实现二级和三级联动写法的代码,稍微整理精简一下做下分享。

视图页面:

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
  ]); ?>
  <!--一级目录--> <?= $form->field($model, 'cocate_id')->dropDownList(Helper::courseCateMap(), ['prompt' => yii::t('backend', 'Please select course cate')]) ?>

  <!--二级目录--><?= $form->field($model, 'course_id')->dropDownList(Helper::courseMap($model->cocate_id), ['prompt' => yii::t('backend', 'Please select first course cate')])?>

   <!--三级目录--><?= $form->field($model, 'person_id')->dropDownList(Helper::personMap(1, $model->cocate_id), ['prompt' => yii::t('backend', 'Please select person')]) ?>
  
  <?php ActiveForm::end(); ?>
  页面嵌套js
  <?php 
$js = '
//分类
$("#classsearch-cocate_id").change(function() {
  var cocateId = $(this).val();//获取一级目录的值
  $("#classsearch-course_id").html("<option value=\"\">'.yii::t('backend', 'Please select course').'</option>");//二级显示目录标签
  $("#classsearch-person_id").html("<option value=\"\">'.yii::t('backend', 'Please select person').'</option>");//三级显示目录标签(如果 你只需要二级 三级的可以直接删除掉)
  if (cocateId > 0) {
    getCourse(cocateId);//查询二级目录的方法
    getPerson(cocateId);//查询三级目录的方法(如果 你只需要二级 三级的可以直接删除掉)
  }
});
  
function getCourse(cocateId){
  var href = "'.Url::to(['/ajax/option']).'";//请求的地址
  $.ajax({
    "type" : "GET",
    "url"  : href,
    "data" : {cocateId : cocateId,type : "course"},//所需参数和类型
    success : function(d) {
      $("#classsearch-course_id").append(d);//返回值输出
    }
  });
}

function getPerson(cocateId){
  var href = "'.Url::to(['/ajax/option']).'";//同上
  $.ajax({
    "type" : "GET",
    "url"  : href,
    "data" : {cocateId : cocateId,type : "person"},//所需参数和类型
    success : function(d) {
      $("#classsearch-person_id").append(d);//同上
    }
  });
}
    
  
';
$this->registerJs($js);
?>

php代码:

这个是ajax自己声明的控制器:

<?php 

namespace backend\controllers;
class AjaxController extends BaseController
{
    public function actionOption($cocateId, $type)
  {
    switch ($type) {
      case 'course':
        $_data = Helper::courseMap($cocateId);
        break;
      case 'person':
        $_data = Helper::personMap(1, $cocateId);
        break;
      case 'class':
        $_data = Helper::classMap($cocateId);
        break;
    }
      $_tmp = '';
    foreach ($_data as $key => $val) {
      $_tmp .= "<option value='" . $key . "'>{$val}</option>";
    }
    echo $_tmp;
  }

Helper.php 封装好的类文件 可以单独建立文件 在配置中引用 :

<?php
namespace backend\components;//继承的空间路径
class Helper//声明类
{
 //声明查询的方法 一级
  public static function courseCateMap()
  {
    $_data = CourseCate::find()->select('cocate_id,cocate_name')->all();
    $_data = ArrayHelper::map(array_merge($_data), 'cocate_id', 'cocate_name');
    return $_data;
  }
  //声明查询的方法 二级
    public static function courseMap($cocateId)
  {
    $condition['cocate_id'] = $cocateId;
    $_data = Course::find()->select('course_id,course_name')->where($condition)->all();
    $_data = ArrayHelper::map(array_merge($_data), 'course_id', 'course_name');
    return $_data;
  }
  //声明查询的方法 三级
   public static function personMap($percateId, $cocateId = 0)
  {
    
    $shopId = Yii::$app->user->identity->shop_id;
    $condition = [];
    if ($shopId)
    {
      $condition['shop_id'] = $shopId;
    }
    if ($percateId)
    {
      $condition['percate_id'] = $percateId;
    }
    if ($cocateId)
    {
      $condition['cocate_ids'] = intval($cocateId);
    }
    $_data = Person::find()->select('person_id,person_name')->where($condition)->all();

    $_data = ArrayHelper::map(array_merge($_data), 'person_id', 'person_name');
    return $_data;
  }
  }
  ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP一些有意思的小区别
Dec 06 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 #PHP
PHP编程计算日期间隔天数的方法
Apr 26 #PHP
浅谈PHP中类和对象的相关函数
Apr 26 #PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 #PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 #PHP
ThinkPHP中create()方法自动验证实例
Apr 26 #PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 #PHP
You might like
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
javascript string字符串优化问题
2011/07/31 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python连接数据库的方法
2017/10/19 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
计算机求职信
2014/07/02 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers