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 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
laravel批量生成假数据的方法
Oct 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 危险函数解释 分析
2009/04/22 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python切换hosts文件代码示例
2013/12/31 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python类成员继承重写的实现
2020/09/16 Python
python 5个实用的技巧
2020/09/27 Python
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
通信生自我鉴定
2014/01/18 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python