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一些常用的正则表达式字符的一些转换
Jul 29 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
PHP实现适用于自定义的验证码类
Jun 15 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
Apr 09 PHP
laravel 数据验证规则详解
Oct 23 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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实现验证码功能
2006/10/09 PHP
一个简单实现多条件查询的例子
2006/10/09 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Tensorflow 多线程设置方式
2020/02/06 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
浅谈Python3中print函数的换行
2020/08/05 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
单位单身证明范本
2014/01/11 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
世界遗产的导游词
2015/02/13 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
Python中22个万用公式的小结
2021/07/21 Python
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫