yx 2015-07-13 14:28:05 29782次浏览 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

觉得很赞
  • 评论于 2015-07-13 16:31 举报

    上个效果图更清晰

    1 条回复
    评论于 2015-07-13 17:02 回复

    效果图已加

  • 评论于 2015-07-13 17:13 举报

    谢谢楼主分享,已点赞。

    2 条回复
    评论于 2015-07-13 17:20 回复

    感谢评论,已回复,方便以后用到。每次都是学到哪,扔到那,过后就忘了

    评论于 2016-08-15 16:58 回复

    按你的办法,为啥联动的js报错了呢

  • 评论于 2015-07-13 18:51 举报

    谢谢楼主 已经点赞

  • 评论于 2015-07-15 10:49 举报

    不错,谢谢分享

  • 评论于 2015-07-15 17:11 举报

    刚好要用,谢楼主分享

  • 评论于 2015-07-17 10:37 举报

    非常感谢分享
    亲问下 dropDownList() 里面的option 有哪些值可以用?
    手册上不是很明朗

    2 条回复
    评论于 2015-07-17 16:08 回复

    标签的属性,比如style,click等。

    评论于 2015-07-17 17:26 回复

    发现个错误 $.post() 里面的地址 ? 应该是&

  • 评论于 2015-07-20 10:55 举报

    不错 收藏了

  • 评论于 2015-07-22 00:35 举报

    new Member()什么意思?

    还是不懂调用

    1 条回复
    评论于 2015-07-23 09:28 回复

    这个是你控制器中的模型,比如说你要在用户信息中地址的时候使用三级联动,那这个new Member()就是用户模型。

  • 评论于 2015-07-23 22:09 举报

    MAC电脑,为什么程序员都这么土豪。。。。。。。。。

    1 条回复
    评论于 2015-07-24 09:47 回复

    什么意思,这个效果是程序做的,不是mac的浏览器效果

  • 评论于 2015-08-07 14:53 举报

    默默点赞!!!支持

  • 评论于 2015-09-14 15:43 举报

    正好用到,已点赞。
    做下述补充,给需要解决问题的朋友们少走点弯路。
    1、其中的member指的是自己的模型名称,如果不用这个名字,上述所有出现member的地方,放置自己模型名称
    2、控制器中的site方法中用到了html::tag,请使用命名空间use yii\helpers\Html;否则无法正确输出。
    3、view中的那个$model,请自己赋予适当的模型。如 $model = new Member();

    2 条回复
    评论于 2016-08-12 17:34 回复

    第三条 怎么加?  能具体点吗

    评论于 2016-08-17 08:55 回复

    你在控制器中将model赋给view视图

    , , , 觉得很赞
  • 评论于 2015-10-14 10:39 举报

    我的代码只能出一级联动,我测试了下是view里面的 $model->province 这个没有值,不清楚这个是什么意思?我的字段里也没有province啊

    6 条回复
    评论于 2016-05-14 12:23 回复

    看看 的 补充 第二条

    评论于 2016-10-11 09:31 回复

    和上面那位水友一样,我加入了use yii\helpers\Html; 还是提示没有province 这个元素

    评论于 2016-10-11 12:19 回复

    @jy02477221 看看我后面的 写的很全

    评论于 2016-10-13 11:51 回复

    看了,没看懂,我进页面就报模版中没有province 这个元素,是模版代码的问题吗,我少加了什么?

    评论于 2016-10-13 13:39 回复

    @jy02477221 看不见你的代码 不清楚

    评论于 2021-01-15 14:34 回复

    class Yii2City extends \yii\db\ActiveRecord
    {

    public $province;
    public $city;
    public $area;
    
  • 评论于 2015-11-03 10:07 举报

    我在https://github.com/bubifengyun/book-yii2-dev-process,准备借助yiichina里的教程,编辑成一本书,最后用某高校LaTeX论文模板美化一下,每月或者更长时间发布PDF教程总结,求支持。

    我想把你的教程录入到这本书里,并记录您的名字及原网址,可否?谢谢啦。

    4 条回复
    评论于 2015-11-04 21:09 回复

    可以的,弄好之后我也学习一下

    评论于 2016-05-18 09:19 回复

    你的书什么时候能出来?  我想看看

    评论于 2016-05-18 20:01 回复

    网站正在最后的试运行阶段,打算下周开始整理笔记。六月底应该可以出来,谢谢关注。

    评论于 2016-05-18 20:41 回复

    网站正在最后的试运行阶段,打算下周开始整理笔记。六月底应该可以出来,谢谢关注。

  • 评论于 2016-01-18 11:13 举报

    求楼主共享下数据...

  • 评论于 2016-03-01 10:03 举报

    联动效果出来了,但是无法保存数据,真是怪事。

    觉得很赞
  • 评论于 2016-03-08 18:01 举报

    提示Bad Request(#400),missing required parameters:pid

  • 评论于 2016-05-10 11:01 举报

    我的省市县是三张表,然后我按照你的方法稍微改了一下,没有出来,首先省的id拿不到,不知道为什么,请指教下

  • 评论于 2016-05-14 12:27 举报
     <?php
    
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;
    
    /* @var $this yii\web\View */
    /* @var $model common\models\Member */
    /* @var $form yii\widgets\ActiveForm */
    ?>
    
    <div class="member-form">
    
        <?php $form = ActiveForm::begin(['enableClientValidation' => false ]); ?>
    
        <?=   $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
    
        <?php echo $form->field($model, 'province')->textInput(['maxlength' => true]) ?>
    
        <?php echo  $form->field($model, 'city')->textInput(['maxlength' => true]) ?>
    
        <?php // $form->field($model, 'area')->textInput(['maxlength' => true]) ?>
    
    
    
    
        <?= $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'=>'--请选择区--',]) ?>
        <?= $form->field($model, 'body')->textarea(['rows' => 6]) ?>
    
        <div class="form-group">
            <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        </div>
    
        <?php ActiveForm::end(); ?>
    
    </div>
    
    
    

    表单

  • 评论于 2016-05-14 12:29 举报
    
    <?php
    
    use yii\helpers\Html;
    use yii\widgets\DetailView;
    
    /* @var $this yii\web\View */
    /* @var $model common\models\Member */
    
    $this->title = $model->name;
    $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Members'), 'url' => ['index']];
    $this->params['breadcrumbs'][] = $this->title;
    ?>
    <div class="member-view">
    
        <h1><?= Html::encode($this->title) ?></h1>
    
        <p>
            <?= Html::a(Yii::t('app', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
            <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->id], [
                'class' => 'btn btn-danger',
                'data' => [
                    'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
                    'method' => 'post',
                ],
            ]) ?>
        </p>
    
        <?= DetailView::widget([
            'model' => $model,
            'attributes' => [
                'id',
                'name',
                'province',
                'city',
                'area',
                'body:ntext',
            ],
        ]) ?>
    
    </div>
    

    有了这两个完整的 应该没问题了

  • 评论于 2016-05-14 12:31 举报
    
    -- ----------------------------
    -- Table structure for member
    -- ----------------------------
    DROP TABLE IF EXISTS `member`;
    CREATE TABLE `member` (
      `id` int(6) NOT NULL AUTO_INCREMENT,
      `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
      `province` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
      `city` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
      `area` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
      `body` text COLLATE utf8_unicode_ci,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    -- ----------------------------
    -- Records of member
    -- ----------------------------
    INSERT INTO `member` VALUES ('1', '昌平旅行社', '1', '2', '3', '昌平旅行社');
    INSERT INTO `member` VALUES ('2', '随州旅行社', '1', '2', '3', '随州旅行社随州旅行社随州旅行社我是随州人');
    INSERT INTO `member` VALUES ('3', '我的旅行社', '1', '2', '3', '我的旅行社我的旅行社我的旅行社我的旅行社');
    
    

    我试验用的表也贴出来

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