Yii2使用dropdownlist实现地区三级联动功能的方法

2025-05-29 0 20

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

视图部分:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98
<?php

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 */

?>

<div class="row">

<div class="item-search">

<?php $form = ActiveForm::begin([

'action' => ['index'],

'method' => 'get',

'options' => ['class' => 'form-inline']

]); ?>

<?= $form->field($model, 'cityName', ['options' => ['class' => 'form-group col-lg-2']])->dropDownList(ArrayHelper::map($cities, 'id', 'name'), ['prompt' => '请选择城市'])->label('请选择城市', ['class' => 'sr-only']) ?>

<?= $form->field($model, 'areaName', ['options' => ['class' => 'form-group col-lg-2']])->dropDownList(ArrayHelper::map($areas, 'id', 'name'), ['prompt' => '请选择区县'])->label('请选择区县', ['class' => 'sr-only']) ?>

<?= $form->field($model, 'communityName', ['options' => ['class' => 'form-group col-lg-2']])->dropDownList(ArrayHelper::map($communities, 'id', 'name'), ['prompt' => '请选择小区'])->label('请选择小区', ['class' => 'sr-only']) ?>

<div class="col-lg-2 col-lg-offset-1">

<input class="form-control" id="keyword" placeholder="请输入小区名" value="" />

</div>

<div class="col-lg-1">

<button type="button" id="search-community" class="btn btn-info">搜索</button>

</div>

<p></p>

<div class="form-group col-lg-1 pull-right">

<?= Html::submitButton('搜索', ['class' => 'btn btn-primary']) ?>

</div>

<?php ActiveForm::end(); ?>

</div>

</div>

<p>&nbsp;</p>

<?php

$this->registerJs('

//市地址改变

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

//市id值

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

$("#itemsearch-areaname").html("<option value=\\"0\\">请选择区县</option>");

$("#itemsearch-communityname").html("<option value=\\"0\\">请选择小区</option>");

if (cityid > 0) {

getArea(cityid);

}

});

//区地址改变

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

//区id值

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

$("#itemsearch-communityname").html("<option value=\\"0\\">请选择小区</option>");

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中需要直接组合成<option value=""></option>这样的结构直接用,$form->field($model, $var)中的变量数据表中不一定有,得在模型中自己定义,并设置安全字段,而且搜索模型也可能需要修改成自己需要的样子,模型可能要这样:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
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()连表,后来被我全部转化为单表了,多表实在是慢,能转化成单表就用单表吧:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70
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;

}

}

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
/**

* ajax请求小区

*

* @param $id

* @return string

*/

public function actionGetCommunityList($id)

{

$option = '';

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

if ($result) {

foreach ($result as $value) {

$option .= '<option value="' . $value['id'] . '">' . $value['name'] . '</option>';

}

} else {

$option .= '<option value="0">暂未开通可选择的小区</option>';

}

echo $option;

}

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Yii2使用dropdownlist实现地区三级联动功能的方法 https://www.kuaiidc.com/97742.html

相关文章

发表评论
暂无评论