Yii2使用dropdownlist实现地区三级联动功能的方法
来源: 阅读:651 次 日期:2016-08-12 15:18:55
温馨提示: 小编为您整理了“Yii2使用dropdownlist实现地区三级联动功能的方法”,方便广大网友查阅!

本文实例讲述了Yii2使用dropdownlist实现地区三级联动功能的方法。分享给大家供大家参考,具体如下:

视图部分:

use yii\helpers\Url;

use yii\widgets\ActiveForm;

use yii\helpers\ArrayHelper;

use yii\helpers\Html;

/* @var $this yii\web\View */

/* @var $model common\search\service\ItemSearch */

/* @var $form yii\widgets\ActiveForm */

?>

$this->registerJs('

//市地址改变

$("#itemsearch-cityname").change(function() {

//市id值

var cityid = $(this).val();

$("#itemsearch-areaname").html("");

$("#itemsearch-communityname").html("");

if (cityid > 0) {

getArea(cityid);

}

});

//区地址改变

$("#itemsearch-areaname").change(function() {

//区id值

var areaid = $(this).val();

$("#itemsearch-communityname").html("");

if (areaid > 0) {

getCommunity(areaid);

}

});

//获取市下面的区列表

function getArea(id)

{

var href = "' . Url::to(['/service/base/get-area-list'], true). '";

$.ajax({

"type" : "GET",

"url" : href,

"data" : {id : id},

success : function(d) {

$("#itemsearch-areaname").append(d);

}

});

}

//获取区下面的小区列表

function getCommunity(id)

{

var href = "' . Url::to(['/service/base/get-community-list'], true) . '";

$.ajax({

"type" : "GET",

"url" : href,

"data" : {id : id},

success : function(d) {

$("#itemsearch-communityname").append(d);

}

});

}

//搜索小区

$("#search-community").click(function() {

var word = $("#keyword").val();

var areaid = $("#itemsearch-areaname option:selected").val();

var href = "' . Url::to(['/service/base/search-community'], true) . '";

if (areaid > 0) {

$.ajax({

"type" : "GET",

"url" : href,

"data" : {id : areaid, word : word},

success : function(d) {

$("#itemsearch-communityname").html(d);

}

});

}

});

');

?>

模型部分:

就是我们常用的ajax请求,当然php中需要直接组合成这样的结构直接用,$form->field($model, $var)中的变量数据表中不一定有,得在模型中自己定义,并设置安全字段,而且搜索模型也可能需要修改成自己需要的样子,模型可能要这样:

class HuangYeError extends \yii\db\ActiveRecord

{

public $cityName;

public $areaName;

public $communityName;

public $group;

public $cate;

/**

* @inheritdoc

*/

public static function tableName()

{

return 'll_hy_huangye_error';

}

public static function getDb()

{

return Yii::$app->get('dbnhuangye');

}

}

之前是多表,需要使用jjoinWith()连表,后来被我全部转化为单表了,多表实在是慢,能转化成单表就用单表吧:

class HuangYeErrorSearch extends HuangYeError

{

const PAGE_SIZE = 20;

public $communityName;

public $startTime;

public $endTime;

/**

* @inheritdoc

*/

public function rules()

{

return [

[['id', 'serviceid', 'userid', 'categoryid', 'communityid', 'sortorder', 'ctime', 'utime', 'status'], 'integer'],

[['username', 'name', 'logo', 'phone', 'address', 'content', 'error', 'communityName', 'startTime', 'endTime'], 'safe'],

];

}

/**

* @inheritdoc

*/

public function scenarios()

{

// bypass scenarios() implementation in the parent class

return Model::scenarios();

}

/**

* Creates data provider instance with search query applied

*

* @param array $params

*

* @return ActiveDataProvider

*/

public function search($params)

{

$query = HuangYeError::find();

//status == 9 删除状态

$condition = ' `status` != :status';

$p[':status'] = 9;

$query->where($condition, $p);

$dataProvider = new ActiveDataProvider([

'query' => $query,

'pagination' => [

'pageSize' => self::PAGE_SIZE,

],

]);

$this->load($params);

if (!$this->validate()) {

// uncomment the following line if you do not want to any records when validation fails

// $query->where('0=1');

return $dataProvider;

}

$query->andFilterWhere([

'userid' => $this->userid

]);

$query->andFilterWhere(['like', 'username', $this->username])

->andFilterWhere(['like', 'name', $this->name])

->andFilterWhere(['like', 'phone', $this->phone])

->andFilterWhere(['like', 'address', $this->address])

->andFilterWhere(['like', 'content', $this->content])

->andFilterWhere(['ll_hy_huangye_error.status' => $this->status])

->andFilterWhere(['ll_hy_huangye_error.categoryid' => $this->categoryid])

->andFilterWhere(['between', 'ctime', strtotime($this->startTime . '0:0:0'), strtotime($this->endTime . '23:59:59')])

->andFilterWhere(['like', 'error', $this->error]);

if (intval($this->communityName)) {

$query->andFilterWhere(['ll_hy_huangye_error.communityid' => intval($this->communityName)]);

}

$order = ' `ctime` DESC';

$query->orderBy($order);

return $dataProvider;

}

}

控制器中写比较简单一点,直接调用就行了:

/**

* ajax请求小区

*

* @param $id

* @return string

*/

public function actionGetCommunityList($id)

{

$option = '';

$result = self::getCommunity($id);

if ($result) {

foreach ($result as $value) {

$option .= '';

}

} else {

$option .= '';

}

echo $option;

}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

更多信息请查看 网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 加入群交流| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map