项目中有一个省市县的修改,这下要做个三级联动的列表,直接上代码:
一. controller控制器中:
/**
* 地区三联表展示
*/
public function actionSite($pid,$typeid=0){
$model = new Provinces();
$region = $model::find()->select('id,title,pid')->where(['pid' => $pid])->asArray()->all();
if($typeid == 1){
$notice="--请选择地市--";
}else if($typeid == 2 && $region){
$notice="--请选择区县--";
}
echo Html::tag('option',$notice, ['value'=>'0']) ;
foreach($region as $name) { //控制器中的site方法中用到了html::tag,请使用命名空间use yii\helpers\Html;否则无法正确输出。
echo Html::tag('option',Html::encode($name['title']),array('value' => $name['id']));
}
}
二. view中查询方法:
<td class="province">
<?= $form->field($model,'province')->dropDownList(
[ 0 => $pname['title'] ? $pname['title'] : '请选择省份']+Provinces::getRegion(0), [
'onchange'=>'
$(".province").hide();
$.post("'.yii::$app->urlManager->createUrl('/bid/tenders/site').'?typeid=1&pid="+$(this).val(),function(data){
$("#tender-city").html(data);//post传值,返回结果调用city中的样式
});',
])
?>
</td>
<td class="city">
<?= $form->field($model, 'city')->dropDownList(
[ 0 => $cname['title'] ? $cname['title'] : '请选择地市']+Provinces::getRegion($model['province']),[
'onchange'=>'
$(".province").show();
$.post("'.yii::$app->urlManager->createUrl('/bid/tenders/site').'?typeid=2&pid="+$(this).val(),function(data){
$("#tender-county").html(data);//post传值,返回结果调用county中的样式
});',
])
?>
</td>
<td class="county">
<?= $form->field($model, 'county')->dropDownList(
[0 => $tname['title'] ? $tname['title'] : '请选择区县']+Provinces::getRegion($model['city']))
?>
</td>
三. view中getRegion方法查询下级数据:
use yii\helpers\ArrayHelper;
public static function getRegion($parent_id=0)
{
$regions = provinces::find()->where(['pid'=>$parent_id])->asArray()->all();
return ArrayHelper::map($regions, 'id', 'title');
}