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中的时间相差8小时的解决办法
Mar 28 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
php中文验证码实现方法
Jun 18 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
PHP使用两个栈实现队列功能的方法
Jan 15 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python查找相似单词的方法
2015/03/05 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Django实现学生管理系统
2019/02/26 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
物流管理专业推荐信
2014/09/06 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
奖励申请报告范文
2015/05/15 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
导游词之西安骊山
2019/12/03 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android