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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
基于pear auth实现登录验证
Feb 26 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
PHP static局部静态变量和全局静态变量总结
Mar 02 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
比较完整的微信开发php代码
Aug 02 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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/12/06 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
直接有效的自我评价
2014/01/11 职场文书
诚信考试标语
2014/06/24 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
化妆品促销活动总结
2015/05/07 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
德生BCL3000抢先使用感受和评价
2022/04/07 无线电