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 相关文章推荐
关于PHP5 Session生命周期介绍
Mar 02 PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
33道php常见面试题及答案
Jul 06 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
PHP微信分享开发详解
Jan 14 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
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处理json时中文问题的解决方法
2011/04/12 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
Python 使用类写装饰器的小技巧
2018/09/30 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
Python实现Linux监控的方法
2019/05/16 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
新员工入职感言
2014/02/01 职场文书
运动会稿件200字
2014/02/07 职场文书
新教师培训方案
2014/06/08 职场文书
学习张林森心得体会
2014/09/10 职场文书
检讨书怎么写
2015/01/23 职场文书
技术负责人岗位职责
2015/02/10 职场文书
驳回起诉裁定书
2015/05/19 职场文书