yx 2015-07-13 14:28:05 29778次浏览 32条评论 103 43 2

view中代码

<?php
use yii\bootstrap\ActiveForm;

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
?>

<?php $form = ActiveForm::begin(['enableClientValidation' => false]);?>

<?= $form->field($model,'province')->dropDownList($model->getCityList(0),
    [
        'prompt'=>'--请选择省--',
        'onchange'=>'
            $(".form-group.field-member-area").hide();
            $.post("'.yii::$app->urlManager->createUrl('member/site').'?typeid=1&pid="+$(this).val(),function(data){
                $("select#member-city").html(data);
            });',
    ]) ?>

<?= $form->field($model, 'city')->dropDownList($model->getCityList($model->province),
    [
        'prompt'=>'--请选择市--',
        'onchange'=>'
            $(".form-group.field-member-area").show();
            $.post("'.yii::$app->urlManager->createUrl('member/site').'?typeid=2&pid="+$(this).val(),function(data){
                $("select#member-area").html(data);
            });',
    ]) ?>
<?= $form->field($model, 'area')->dropDownList($model->getCityList($model->city),['prompt'=>'--请选择区--',]) ?>
<?php ActiveForm::end();?>

model中添加下面的函数

    /**
     * @param $pid
     * @return array
     */
    public function getCityList($pid)
    {
        $model = City::findAll(array('pid'=>$pid));
        return ArrayHelper::map($model, 'id', 'name');
    }

控制器中添加下面的代码:

    /**
     * Function output the site that you selected.
     * @param int $pid
     * @param int $typeid
     */
    public function actionSite($pid, $typeid = 0)
    {
        $model = new Member();
        $model = $model->getCityList($pid);

        if($typeid == 1){$aa="--请选择市--";}else if($typeid == 2 && $model){$aa="--请选择区--";}

        echo Html::tag('option',$aa, ['value'=>'empty']) ;

        foreach($model as $value=>$name)
        {
            echo Html::tag('option',Html::encode($name),array('value'=>$value));
        }
    }

City数据库结构:

/*
Navicat MySQL Data Transfer

Source Server         : MySQL
Source Server Version : 50624
Source Host           : localhost:3306
Source Database       : yii2advanced

Target Server Type    : MYSQL
Target Server Version : 50624
File Encoding         : 65001

Date: 2015-07-13 14:27:12
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for yii2_city
-- ----------------------------
DROP TABLE IF EXISTS `yii2_city`;
CREATE TABLE `yii2_city` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `pid` smallint(5) unsigned NOT NULL DEFAULT '0',
  `name` varchar(120) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`pid`)
) ENGINE=MyISAM AUTO_INCREMENT=3410 DEFAULT CHARSET=utf8;

liandong.png

觉得很赞
  • 评论于 2016-07-13 20:55 举报

    echo "已收藏"

  • 评论于 2016-08-09 18:59 举报

    演示地址是这样吗
    ?r=city/site

    提示:缺少参数:pid

    如果用 ?r=city/create
    的话,又提示:

    Getting unknown property: app\models\City::province

    1 条回复
    评论于 2021-01-15 14:33 回复

    在City模型中设置属性
    class City extends \yii\db\ActiveRecord
    {

    public $province;
    public $city;
    public $area;
    
  • 评论于 2016-09-08 12:06 举报

    $model = City::findAll(array('pid'=>$pid)); 你好我想问下 你这里面的City 是不是另外一个model类啊,能不能发个完整的程序包呢?我邮箱30444123@qq.com,谢谢拉

  • 评论于 2016-09-26 15:27 举报
    // 当表单为添加新用户,是不是会浪费资源呢? $model = City::findAll(array('pid'=>$pid));
    <?= $form->field($model, 'city')->dropDownList($model->getCityList($model->province),
     
    <?= $form->field($model, 'area')->dropDownList($model->getCityList($model->city),
    
    ```
    
  • 评论于 2016-10-18 15:22 举报

    print_r("已收藏:Yii2.0实现三级联动");

  • 评论于 2017-03-16 10:36 举报

    上面所选的值传给下面的,意思就是选择省后怎么把这个值传给下面的市的

  • 评论于 2017-03-16 17:20 举报

    City::findAll 这个函数为什么不贴出来。坑新人。乱费时间.

  • 评论于 2017-09-11 10:38 举报

    最重要的是数据,,数据,数据,,

  • 评论于 2017-09-29 12:52 举报

    有个问题想请教一下

            $(".form-group.field-member-area").hide();
            $.post("'.yii::$app->urlManager->createUrl('member/site').'?typeid=1&pid="+$(this).val(),function(data){
                $("select#member-city").html(data);
            });',
    ]) ?>
    

    $(".form-group.field-member-area") , $("select#member-area")是从哪里来?
    哪位帮忙发一个比较完整的view视图代码

  • 评论于 2018-03-21 16:32 举报

    修改的时候不行

  • 评论于 2019-04-10 16:56 举报

    这个三级联动还有个小问题,就是在已经选择过区县以后,再去选省份,不会将区县的数据清掉

  • 评论于 2020-03-14 18:05 举报

    必须使用模型和小部件吗?

您需要登录后才可以评论。登录 | 立即注册