yii2中dropDownList实现二级和三级联动写法

整理文档,搜刮出一个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; } } ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-25 21:56:42

yii2中dropDownList实现二级和三级联动写法的相关文章

Yii2中DropDownList简单用法示例_php实例

本文实例讲述了Yii2中DropDownList简单用法.分享给大家供大家参考,具体如下: 这里以实际应用为例讲解Yii2 DropDownList用法. 有一张分类表,无限极分类那种,表结构如下,pid就是父分类ID 这里我们要实现: 新建分类的时候,父分类可以从所有分类中任选一个或者不选 编辑分类时,父分类不能选择当前编辑的分类...如果选自己,父分类就是自己了,必然出错! 实现代码如下,我就贴上form的全部代码吧 <?php use common\models\Category; use

Yii2中DropDownList简单用法示例

本文实例讲述了Yii2中DropDownList简单用法.分享给大家供大家参考,具体如下: 这里以实际应用为例讲解Yii2 DropDownList用法. 有一张分类表,无限极分类那种,表结构如下,pid就是父分类ID 这里我们要实现: 新建分类的时候,父分类可以从所有分类中任选一个或者不选 编辑分类时,父分类不能选择当前编辑的分类...如果选自己,父分类就是自己了,必然出错! 实现代码如下,我就贴上form的全部代码吧 <?php use common\models\Category; use

Ajax实现二级或者三级联动下拉框

$.ajax({ url: url + "option=dropdown",   type: "post",   data: "znstr=" + str + "&znclass="+ zclass + "",   datatype: "html",   error: function(xmlhttprequest) { },   success: function(data)

JS封装的三级联动菜单(使用时只需要一行js代码)_javascript技巧

前言 在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等. 而网上却找不到一个代码完整.功能强大.使用简单的三级联动菜单,大都只是简单的讲了一下实现思路. 下面就给大家分享我在工作中封装并在项目中使用的三级级联操作代码,如有错误或者不当的地方欢迎大家指正. 使用简单(只需要一行代码) 可以根据需要设置是否显示"请选择"项 支持回调(在三级分类加载完成后触发回调事件) 支持一个页面多个级联菜单 演示效果预览: 三级联动封装 原理:将selec标签以及相关

Yii2使用dropdownlist实现地区三级联动功能的方法_php实例

本文实例讲述了Yii2使用dropdownlist实现地区三级联动功能的方法.分享给大家供大家参考,具体如下: 视图部分: <?php use yii\helpers\Url; use yii\widgets\ActiveForm; use yii\helpers\ArrayHelper; use yii\helpers\Html; /* @var $this yii\web\View */ /* @var $model common\search\service\ItemSearch */ /

DropDownList实现Ajax无刷新省市三级联动错误解决方法

解决方法: (把dropdownlist改为客户端html控件select,然后用ajax存储,肯定不会有错误 ,但是这里表单有很多需要提交的数据,所以不考虑用客户端html控件) 1.在页面的<%@ page language="c#" autoeventwireup="true" codefile="default.asp教程x.cs" inherits="_default" %> 中添加 enableeven

qt-QComboBox 中三级联动设置省市区

问题描述 QComboBox 中三级联动设置省市区 QComboBox 中三级联动设置省市区 我有一个txt文件里有各省市区的数据如图 但是我怎么去提取这些数据呢 解决方案 /* 以下是思路,代码未测试,酌情参考* 可见序号是唯一,一个城市对应一个序号 用一个QMap存储序号-城市对应关系 再用一个QMap存储每个序号-子序号对应关系* QComboBox用的时候 第一个QComboBox,提取idChildsMap--Key为0的 QList,从idNameMap,遍历进去 第二个QCombo

数据库查询-三级联动的二级和三级要用查询到的数据来关联

问题描述 三级联动的二级和三级要用查询到的数据来关联 如图所示,gc_parent_id=0的商品是第一级,后面二三级的gc_parent_id等于他前一级的id,然后我在网上找了个三级联动的JS代码,我的核心代码如图: 我本来的想法是循环套循环,每次根据查询出来上一级的id来查询下一级的id和name,然后套用三级联动JS代码的写法来写,但是出来的效果是所有的东西都在一起: : 想问问各位该怎么做....实在是没辙了啊!最头疼的地方在于那个.=把所有查询出来的东西都连在一起了! help!!!

下拉框-关于easyui中combobox怎么在三级联动中点击第一级时清空第三极

问题描述 关于easyui中combobox怎么在三级联动中点击第一级时清空第三极 请问怎么将combobox实现联动之后,点击第一级时清空第三级的下拉框的数据,我实现了一个,但是不能公用,找了很久没有找到方法,使用combobox的clear也不行 解决方案 刚开始官网打不开,调试了半天才找到:$('#ID').combobox('loadData', {}); combobox的clear只是清空选中项.http://www.jeasyui.com/documentation/index.p