Yii2.0 实现三级联动 [ 2.0 版本 ]
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;
yx 上海
注册时间:2014-09-11
最后登录:2020-08-03
在线时长:31小时46分
最后登录:2020-08-03
在线时长:31小时46分
- 粉丝22
- 金钱5925
- 威望45
- 积分6685
共 32 条评论
echo "已收藏"
演示地址是这样吗
?r=city/site
提示:缺少参数:pid
如果用 ?r=city/create
的话,又提示:
Getting unknown property: app\models\City::province
在City模型中设置属性
class City extends \yii\db\ActiveRecord
{
public $province; public $city; public $area;
$model = City::findAll(array('pid'=>$pid)); 你好我想问下 你这里面的City 是不是另外一个model类啊,能不能发个完整的程序包呢?我邮箱30444123@qq.com,谢谢拉
// 当表单为添加新用户,是不是会浪费资源呢? $model = City::findAll(array('pid'=>$pid)); <?= $form->field($model, 'city')->dropDownList($model->getCityList($model->province), <?= $form->field($model, 'area')->dropDownList($model->getCityList($model->city), ```
print_r("已收藏:Yii2.0实现三级联动");
上面所选的值传给下面的,意思就是选择省后怎么把这个值传给下面的市的
City::findAll 这个函数为什么不贴出来。坑新人。乱费时间.
最重要的是数据,,数据,数据,,
有个问题想请教一下
$(".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视图代码
修改的时候不行
这个三级联动还有个小问题,就是在已经选择过区县以后,再去选省份,不会将区县的数据清掉
必须使用模型和小部件吗?