-1, 'name' => '不限', ); private $search_default = array ( 'value' => -1, 'name' => '地区选择', ); /** * 获取地区数据 * * @return mixed */ public function get() { # 联动总数,默认到县区 $level_total = Dever::input('level_total', 3); # 当前联动级别 $level_num = Dever::input('level_num'); # 一般为id $level_id = Dever::input('level_id'); # 是否是搜索列表页 $level_search = Dever::input('level_search'); if ($level_search) { $default = $this->search_default; if ($level_num == 1) { $default['name'] = '省份选择'; } elseif ($level_num == 2) { $default['name'] = '城市选择'; } elseif ($level_num == 3) { $default['name'] = '县区选择'; } elseif ($level_num == 4) { $default['name'] = '街道选择'; } else { $default['name'] = '社区选择'; } } else { $default = $this->default; } # 四级联动 if ($level_num == 1) { $data = Dever::db('area/province')->getAll(); } elseif ($level_num == 2) { $data = Dever::db('area/city')->getAll(array('province_id' => $level_id)); } elseif ($level_num == 3) { $data = Dever::db('area/county')->getAll(array('city_id' => $level_id)); } elseif ($level_num == 4) { $data = Dever::db('area/town')->getAll(array('county_id' => $level_id)); } else { $data = Dever::db('area/village')->getAll(array('town_id' => $level_id)); } if (!$data) { Dever::alert('error'); } if ($level_search || $level_num > 1) { array_unshift($data, $default); } $result['level_total'] = $level_total; $result['list'] = $data; return $result; } /** * 获取详细信息 * * @return mixed */ public function getInfo($area, $col = 'id') { if ($area) { $area = explode(',', $area); $result = array(); foreach ($area as $k => $v) { if ($k == 0) { $result[$k] = $this->getName('province', $v, true, $col); } elseif ($k == 1) { $result[$k] = $this->getName('city', $v, true, $col); if ($col == 'id' && isset($result[1]['name']) && $result[0]['name'] == $result[1]['name']) { unset($result[1]); } } elseif ($k == 2) { $result[$k] = $this->getName('county', $v, true, $col); } elseif ($k == 3) { $result[$k] = $this->getName('town', $v, true, $col); } elseif ($k == 4) { $result[$k] = $this->getName('village', $v, true, $col); } } return $result; } return array(); } /** * 根据地区id转成名称 * * @return mixed */ public function string($area, $im = ',', $unset = true, $name = '不限') { if ($area) { $area = explode(',', $area); $result = array(); foreach ($area as $k => $v) { if ($k == 0) { $result[$k] = $this->getName('province', $v, false, 'id', $name); } elseif ($k == 1) { $result[$k] = $this->getName('city', $v); if ($result[0] == $result[1] && $unset) { unset($result[1]); } } elseif ($k == 2) { $result[$k] = $this->getName('county', $v, false, 'id', $name); } elseif ($k == 3) { $result[$k] = $this->getName('town', $v, false, 'id', $name); } elseif ($k == 4) { $result[$k] = $this->getName('village', $v, false, 'id', $name); } } return implode($im, $result); } return ''; } private function getName($table, $value, $state = false, $col = 'id', $name = '不限') { if (($col == 'id' && $value > 0) || ($col != 'id' && $value)) { $where[$col] = $value; $data = Dever::db('area/' . $table)->one($where); if ($state) { return $data; } if ($data) { $name = $data['name']; } } return $name; } # 获取6位地区编码 public function code($id, $len = 6) { $id = substr($id, 0, $len); $id = str_pad($id, $len, '0', STR_PAD_RIGHT); return $id; } # 修改区域状态 public function upStatus($area, $status = 2) { $table = ''; $update['status'] = $status; $temp = explode(',', $area); $num = count($temp); if ($num == 4 && isset($temp[3]) && $temp[3]) { # 街道 $update['where_id'] = $temp[3]; $table = 'area/town'; } elseif ($num == 3 && isset($temp[2]) && $temp[2]) { # 区县 $update['where_id'] = $temp[2]; $table = 'area/county'; } elseif ($num == 2 && isset($temp[1]) && $temp[1]) { # 城市 $update['where_id'] = $temp[1]; $table = 'area/city'; } $state = false; if ($table) { $state = Dever::db($table)->update($update); } return $state; } public function getProvince() { return Dever::db('area/province')->getAll(); } public function getCity($province_id) { return Dever::db('area/city')->getAll(array('province_id' => $province_id)); } public function getCounty($city_id) { return Dever::db('area/county')->getAll(array('city_id' => $city_id)); } public function getTown($county_id) { return Dever::db('area/town')->getAll(array('county_id' => $county_id)); } public function getVillage($town_id) { return Dever::db('area/village')->getAll(array('town_id' => $town_id)); } # 获取城市并根据首字母排序的 public function getCityToFirst() { $result = array(); $data = Dever::db('area/city')->getAll(); if (Dever::import('pinyin')) { $result = Dever::sortPinyinFirst($data, 'pinyin_first'); } return $result; } # 获取价值 public function getPrice($type, $area) { $price = 0; $area = explode(',', $area); $city = $area[1]; $city = Dever::db('area/city')->find($city); if ($city && $city['level_id'] > 0) { $level = Dever::db('area/level')->find($city['level_id']); if (!$level) { return $price; } $num = 10000; if ($type == 1) { # 城市 $price = $level['city_price'] * $num; } elseif ($type == 2) { # 区县 $county = $area[2]; $county = Dever::db('area/county')->find($county); if ($county && $county['level'] == 2) { $up_level = Dever::db('area/level')->find(array('level' => $level['level'] - 1)); if ($up_level) { $level['county_price'] = $up_level['county_price']; } } if ($county && $county['level'] == 3) { $up_level = Dever::db('area/level')->find(array('level' => $level['level'] - 2)); if ($up_level) { $level['county_price'] = $up_level['county_price']; } } $price = $level['county_price'] * $num; } elseif ($type == 3) { # 街道 $town = $area[3]; $town = Dever::db('area/town')->find($town); if ($town && $town['type'] > 1) { $level['town_price'] = $level['county_price']; } $price = $level['town_price'] * $num; } } return $price; } /** * 获取三级地区数据:json格式,生成js文件 * * @return mixed */ public function createJson() { $path = Dever::data() . 'upload/'; $create = Dever::input('create', 1); $type = Dever::input('type', 'js'); if ($type == 'klist') { $file = $path . 'city.' . $type . '.js'; } else { $file = $path . 'city.' . $type; } if (!is_file($file)) { $create = 2; } if ($create == 2) { $array = array ( array ( 'value' => "-1", 'name' => '请选择', ), ); $klist = Dever::db('area/province')->getAll(); if ($type == 'klist') { $province = $klist; } else { $province = array_merge($array, $klist); } $province_data = array(); $city_data = array(); $county_data = array(); foreach ($province as $k => $v) { $province_data[$k]['name'] = $v['name']; $province_data[$k]['id'] = $v['value']; if ($v['value'] <= 0) { continue; } $klist[$k]['text'] = $v['name']; $klist[$k]['value'] = $v['value']; $klist[$k]['children'] = Dever::db('area/city')->getAll(array('province_id' => $v['value'])); if ($type == 'klist') { $city = $klist[$k]['children']; } else { $city = array_merge($array, $klist[$k]['children']); } foreach ($city as $k1 => $v1) { $city_data[$v['value']][$k1]['province'] = $v['name']; $city_data[$v['value']][$k1]['name'] = $v1['name']; $city_data[$v['value']][$k1]['id'] = $v1['value']; if ($v1['value'] <= 0) { continue; } $klist[$k]['children'][$k1]['text'] = $v1['name']; $klist[$k]['children'][$k1]['value'] = $v1['value']; $klist[$k]['children'][$k1]['children'] = Dever::db('area/county')->getAll(array('city_id' => $v1['value'])); if ($type == 'klist') { $county = $klist[$k]['children'][$k1]['children']; } else { $county = array_merge($array, $klist[$k]['children'][$k1]['children']); } foreach ($county as $k2 => $v2) { $klist[$k]['children'][$k1]['children'][$k2]['text'] = $v2['name']; $klist[$k]['children'][$k1]['children'][$k2]['value'] = $v2['value']; $county_data[$v1['value']][$k2]['city'] = $v1['name']; $county_data[$v1['value']][$k2]['name'] = $v2['name']; $county_data[$v1['value']][$k2]['id'] = $v2['value']; } } } if ($type == 'klist') { $content = 'var cities = ' . Dever::json_encode($klist) . ';'; } elseif ($type == 'js') { $content = 'var provinces = ' . Dever::json_encode($province_data) . ';'; $content .= 'var citys = ' . Dever::json_encode($city_data) . ';'; $content .= 'var areas = ' . Dever::json_encode($county_data) . ';'; } elseif ($type == 'plist') { $content = ' ' . "\r\n"; foreach ($province_data as $k => $v) { $content .= ' province '.$v['name'].' citys '; if (isset($city_data[$v['id']])) { foreach ($city_data[$v['id']] as $k1 => $v1) { $content .= "\r\n" . ' city '.$v1['name'].' districts '; if (isset($county_data[$v1['id']])) { foreach ($county_data[$v1['id']] as $k2 => $v2) { $content .= "\r\n" . ' '.$v2['name'].''; } $content .= "\r\n "; } $content .= '' . "\r\n" . ' '; } $content .= "\r\n "; } $content .= '' . "\r\n" . ' ' . "\r\n"; } $content .= '' . "\r\n" . ''; } file_put_contents($file, $content); } $assets = Dever::config('host')->uploadRes; return str_replace($path, $assets, $file); } }