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

5年以前  |  阅读数:1065 次  |  编程语言:PHP 

整理文档,搜刮出一个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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例