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网站备份程序代码分享
Jun 10 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
php 如何获取文件的后缀名
Jun 05 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 PHP
php array_map()函数实例用法
Mar 03 PHP
PHP 实现链式操作
Mar 09 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
PHP开发框架总结收藏
2008/04/24 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
javascript与webservice的通信实现代码
2010/12/25 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
vue接口请求加密实例
2020/08/11 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python聊天程序实例代码分享
2013/11/18 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python编写单元测试代码实例
2020/09/10 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
Python实现区域填充的示例代码
2021/02/03 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
环境卫生标语
2014/06/09 职场文书
导游词之无锡梅园
2019/11/28 职场文书