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的类树(支持无限分类)
Oct 09 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php文本转图片自动换行的方法
Mar 13 PHP
php防止SQL注入详解及防范
Nov 12 PHP
PHP eval函数使用介绍
Dec 08 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
浅析PHP7 的垃圾回收机制
Sep 06 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP 学习路线与时间表
2010/02/21 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python如何编写win程序
2020/06/08 Python
Python requests接口测试实现代码
2020/09/08 Python
请解释在new与override的区别
2012/10/29 面试题
生产部经理岗位职责
2013/12/16 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
检讨书格式
2019/04/25 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
Ruby处理YAML和json数据
2022/04/18 Ruby
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
MySQL 字符集 character
2022/05/04 MySQL