* Date: 2018-4-3 */ namespace app\admin\controller; use think\Db; use think\Page; use think\Cache; class Citysite extends Base { public static $top_city = [ "山东" => ["青岛","济南","烟台","潍坊","临沂","济宁","淄博","威海","东营","德州","泰安","聊城","滨州","菏泽","枣庄"], "江苏" => ["苏州","南京","无锡","南通","常州","徐州","扬州","盐城","泰州","镇江","淮安","连云港","宿迁"], "广东" => ["深圳","广州","佛山","东莞","惠州","珠海","江门","茂名","中山","湛江"], "浙江" => ["杭州","宁波","温州","绍兴","嘉兴","台州","金华","湖州"], "河北" => ["唐山","石家庄","沧州","邯郸","保定","廊坊"], "河南" => ["郑州","洛阳","南阳","许昌","周口","新乡"], "湖南" => ["长沙","岳阳","常德","衡阳","株洲","郴州"], "福建" => ["福州","泉州","厦门","漳州"], "内蒙古" => ["鄂尔多斯","呼和浩特","包头"], "湖北" => ["武汉","襄阳","宜昌"], "辽宁" => ["大连","沈阳","鞍山"], "陕西" => ["西安","榆林","咸阳"], "安徽" => ["合肥","芜湖"], "广西" => ["南宁","柳州"], "贵州" => ["贵阳","遵义"], "黑龙江" => ["哈尔滨","大庆"], "吉林" => ["长春","吉林"], "新疆" => ["乌鲁木齐"], "江西" => ["南昌"], "四川" => ["成都"], "云南" => ["昆明"], "甘肃" => ["兰州"], "山西" => ["太原"], "北京" => [], "天津" => [], "上海" => [], "重庆" => [], ]; private $web_citysite_open; // 禁用的目录名称 private $disableDirname = []; public function _initialize(){ parent::_initialize(); $this->disableDirname = config('global.disable_dirname'); $functionLogic = new \app\common\logic\FunctionLogic; $functionLogic->validate_authorfile(2); $this->web_citysite_open = tpCache('global.web_citysite_open'); $this->assign('web_citysite_open', $this->web_citysite_open); } public function index() { $assign_data = array(); $condition = array(); // 获取到所有GET参数 $param = input('param.'); $parent_id = input('pid/d', 0); // 应用搜索条件 foreach (['keywords','pid'] as $key) { $param[$key] = addslashes(trim($param[$key])); if (isset($param[$key]) && $param[$key] !== '') { if ($key == 'keywords') { $condition['name'] = array('LIKE', "%{$param[$key]}%"); } else if ($key == 'pid') { $condition['parent_id'] = array('eq', $param[$key]); } else { $condition[$key] = array('eq', $param[$key]); } } } // 上一级区域名称 $parentInfo = Db::name('citysite')->where(['id'=>$parent_id])->find(); $parentLevel = !empty($parentInfo['level']) ? intval($parentInfo['level']) : 0; $condition['level'] = $parentLevel + 1; $regionM = Db::name('citysite'); $count = $regionM->where($condition)->count('id');// 查询满足要求的总记录数 $Page = $pager = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数 $list = $regionM->where($condition)->order('sort_order asc, id asc')->limit($Page->firstRow.','.$Page->listRows)->select(); foreach ($list as $key => $val) { $val['siteurl'] = siteurl($val); $list[$key] = $val; } $show = $Page->show();// 分页显示输出 $this->assign('page',$show);// 赋值分页输出 $this->assign('list',$list);// 赋值数据集 $this->assign('pager',$pager);// 赋值分页对象 $this->assign('parentInfo',$parentInfo); return $this->fetch(); } public function add(){ if (IS_POST) { $post = input('post.'); $post['name'] = trim($post['name']); $post['domain'] = preg_replace("/[^a-zA-Z0-9]+/", "", strtolower($post['domain'])); // --存储数据 $nowData = array( 'initial' => getFirstCharter($post['name']), 'seo_description' => !empty($post['seo_description']) ? $post['seo_description'] : '', 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ); if (!empty($post['city_id'])){ $nowData['level'] = 3; $nowData['parent_id'] = intval($post['city_id']); $nowData['topid'] = intval($post['province_id']); } else if (!empty($post['province_id'])){ $nowData['level'] = 2; $nowData['parent_id'] = intval($post['province_id']); $nowData['topid'] = intval($post['province_id']); } else { $nowData['level'] = 1; $nowData['parent_id'] = 0; $nowData['topid'] = 0; } $data = array_merge($post, $nowData); if (empty($data['name'])) { $this->error('区域名称不能为空!'); } // 区域名称是否已存在 $count = Db::name('citysite')->where([ 'name' => $data['name'], 'parent_id' => $data['parent_id'], ])->count(); if (!empty($count)) { $this->error('区域名称已存在,请更换!'); } if (!empty($data['domain'])) { $count = Db::name('citysite')->where([ 'domain' => $data['domain'], ])->count(); if (!empty($count)) { $this->error('英文名称已存在!'); } // 检测 if (!empty($data['domain']) && !$this->domain_unique($data['domain'])) { $this->error('英文名称与系统内置冲突,请更改!'); } /*--end*/ } else { $this->error('英文名称不能为空!'); } $insertId = M('citysite')->insertGetId($data); if (false !== $insertId) { \think\Cache::clear('citysite'); // extra_cache('global_get_site_province_list', null); // extra_cache('global_get_site_city_list', null); // extra_cache('global_get_site_area_list', null); adminLog('新增区域:'.$data['name']); $this->success("操作成功"); }else{ $this->error("操作失败"); } exit; } $pid = input('param.pid/d', 0); $region = array_reverse($this->getParentCitysiteId($pid)); $assign_data['province_id'] = !empty($region[0]) ? $region[0] : 0; $assign_data['city_id'] = !empty($region[1]) ? $region[1] : 0; // 省份列表 $province_all = $this->get_site_province_all(); $assign_data['province_all'] = $province_all; $assign_data['rootDomain'] = $this->request->rootDomain().ROOT_DIR; $this->assign($assign_data); return $this->fetch(); } //批量新增 public function batch_add(){ if (IS_POST) { $post = input('post.'); $name = trim($post['name']); if (empty($name)) { $this->error('区域名称不能为空!'); } $nameArr = explode("\r\n", $name); //去除数组空值、左右空格 foreach ($nameArr as $key => $val) { $val = trim($val); if (empty($val)) { unset($nameArr[$key]); } else { $nameArr[$key] = $val; } } $nameArr = array_unique($nameArr); //去重 if (!empty($post['city_id'])){ $level = 3; $parent_id = intval($post['city_id']); $topid = intval($post['province_id']); } else if (!empty($post['province_id'])){ $level = 2; $parent_id = intval($post['province_id']); $topid = intval($post['province_id']); } else { $level = 1; $parent_id = 0; $topid = 0; } $have_name = Db::name('citysite')->where(['parent_id' => $parent_id])->column('name'); $addData = $insert_name = []; foreach ($nameArr as $key => $val) { if(empty($val) || in_array($val,$have_name)) { continue; } $insert_name[] = $val; $domain = preg_replace("/[^a-zA-Z0-9]+/", "", get_pinyin($val)); $domain = $this->rand_domain($domain); $addData[] = [ 'name' => $val, 'domain' => $domain, 'level' => $level, 'parent_id' => $parent_id, 'topid' => $topid, 'is_open' => !empty($post['is_open']) ? intval($post['is_open']) : 0, 'showall' => !empty($post['showall']) ? intval($post['showall']) : 1, 'seoset' => !empty($post['seoset']) ? intval($post['seoset']) : 0, 'initial' => getFirstCharter($val), 'seo_title' => str_replace(['{region}','{区域}'], $val, $post['seo_title']), 'seo_keywords' => str_replace(['{region}','{区域}'], $val, $post['seo_keywords']), 'seo_description' => str_replace(['{region}','{区域}'], $val, $post['seo_description']), 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; } $res = Db::name('citysite')->insertAll($addData); if (false !== $res) { \think\Cache::clear('citysite'); // extra_cache('global_get_site_province_list', null); // extra_cache('global_get_site_city_list', null); // extra_cache('global_get_site_area_list', null); adminLog('批量新增区域:'.implode(',',$insert_name)); $this->success("操作成功"); }else{ $this->error("操作失败"); } exit; } $pid = input('param.pid/d', 0); $region = array_reverse($this->getParentCitysiteId($pid)); $assign_data['province_id'] = !empty($region[0]) ? $region[0] : 0; $assign_data['city_id'] = !empty($region[1]) ? $region[1] : 0; // 省份列表 $province_all = $this->get_site_province_all(); $assign_data['province_all'] = $province_all; $assign_data['rootDomain'] = $this->request->rootDomain().ROOT_DIR; $this->assign($assign_data); return $this->fetch(); } public function edit(){ if (IS_POST) { $post = input('post.'); if(!empty($post['id'])){ $post['id'] = intval($post['id']); $post['name'] = trim($post['name']); $post['domain'] = preg_replace("/[^a-zA-Z0-9]+/", "", strtolower($post['domain'])); // --存储数据 $nowData = array( 'initial' => getFirstCharter($post['name']), 'seo_description' => !empty($post['seo_description']) ? $post['seo_description'] : '', 'update_time' => getTime(), ); if (!isset($post['province_id'])) $post['province_id'] = $post['old_province_id']; if (!isset($post['city_id'])) $post['city_id'] = $post['old_city_id']; if (!empty($post['city_id'])){ $nowData['level'] = 3; $nowData['parent_id'] = intval($post['city_id']); $nowData['topid'] = intval($post['province_id']); } else if (!empty($post['province_id'])){ $nowData['level'] = 2; $nowData['parent_id'] = intval($post['province_id']); $nowData['topid'] = intval($post['province_id']); } else { $nowData['level'] = 1; $nowData['parent_id'] = 0; $nowData['topid'] = 0; } $data = array_merge($post, $nowData); if (empty($data['name'])) { $this->error('区域名称不能为空!'); } // 区域名称是否已存在 $count = Db::name('citysite')->where([ 'id' => ['NEQ', $data['id']], 'name' => $data['name'], 'parent_id' => $data['parent_id'], ])->count(); if (!empty($count)) { $this->error('区域名称已存在,请更换!'); } if (!empty($data['domain'])) { $count = Db::name('citysite')->where([ 'domain' => $data['domain'], 'id' => ['NEQ', $data['id']], ])->count(); if (!empty($count)) { $this->error('英文名称已存在!'); } // 检测 if (!empty($data['domain']) && !$this->domain_unique($data['domain'], $data['id'])) { $this->error('英文名称与系统内置冲突,请更改!'); } /*--end*/ } else { $this->error('英文名称不能为空!'); } $r = M('citysite')->where([ 'id' => $post['id'], ]) ->cache(true, null, "citysite") ->update($data); if (false !== $r) { // 同步处理子级城市 if (empty($post['province_id'])) { Db::name('citysite')->where([ 'parent_id' => $post['id'], ])->update([ 'level' => 2, 'topid' => $post['id'], 'update_time' => getTime(), ]); } else if (!empty($post['province_id']) && empty($post['city_id'])) { Db::name('citysite')->where([ 'parent_id' => $post['id'], ])->update([ 'level' => 3, 'topid' => $data['topid'], 'update_time' => getTime(), ]); } // extra_cache('global_get_site_province_list', null); // extra_cache('global_get_site_city_list', null); // extra_cache('global_get_site_area_list', null); adminLog('编辑区域:'.$data['name']); $this->success("操作成功"); } } $this->error("操作失败"); } $id = input('param.id/d', 0); $info = model("Citysite")->getInfo($id); $assign_data['field'] = $info; $region = array_reverse($this->getParentCitysiteId($info['parent_id'])); $assign_data['province_id'] = !empty($region[0]) ? $region[0] : 0; $assign_data['city_id'] = !empty($region[1]) ? $region[1] : 0; // 省份列表 $province_all = $this->get_site_province_all(); $assign_data['province_all'] = $province_all; $assign_data['rootDomain'] = $this->request->rootDomain().ROOT_DIR; // 是否有下级以及层级 $assign_data['childrenLevelCount'] = Db::name('citysite')->field('level')->where(['parent_id|topid'=>$id])->group('level')->count(); $this->assign($assign_data); return $this->fetch(); } public function conf(){ if (IS_POST) { $post = $data = input('post.'); foreach ($data as $key => $val) { $val = trim($val); $data[$key] = $val; } tpCache('site', $data); adminLog('多站点功能配置'); $this->success("操作成功"); } $assign_data = []; $row = tpCache('site'); $assign_data['row'] = $row; // 站点区域 $site_default_home = !empty($row['site_default_home']) ? intval($row['site_default_home']) : 0; $citysiteLogic = new \app\common\logic\CitysiteLogic; $assign_data['citysite_html'] = $citysiteLogic->citysite_list(0, $site_default_home, true, 0, array(), false); $assign_data['site_default_home'] = $site_default_home; $this->assign($assign_data); return $this->fetch(); } /* * 开启关闭启用 * 开启当前,判断当前是否为唯一开启,如果是,则将当前设置为默认区域 * 关闭当前,判断当前是否为原来默认区域:如果是,则判断当前同级(相同上级)是否存在开启:如存在,设置为默认,如不存在:判断第一级是否存在开启:如存在,设置第一个为默认,如不存在,继续往下级查找。 * * 至少必须存在一个开启区域 */ public function setStatus() { $id = input('id/d', 0); $status = input('status/d', 0); $list = Db::name("citysite")->where("status=1")->getField("id,status"); if ($status == 0){ if (count($list) == 1 && !empty($list[$id])){ $this->error("至少存在一个开启区域!"); } } Db::name('citysite')->where(['id'=>$id])->cache(true, null, "citysite")->update(['status'=>$status, 'update_time'=>getTime()]); $this->success("设置成功"); /* $id = input('id/d', 0); $status = input('status/d', 0); $list = Db::name("citysite")->where("status=1")->order("level asc")->getField("id,parent_id,status,is_default,level"); $count = count($list); $is_true = true; if ($status == 1){ if ($count == 0 || ($count == 1 && empty($list[$id]))){ $is_true = $this->setIsDefault($id); } }else{ if ($count == 1 && !empty($list[$id])){ $this->error("至少存在一个开启区域!".$status); } if (!empty($list[$id]) && $list[$id]['is_default'] == 1){ $peer_id = $top_id = $any_id = 0; foreach ($list as $val){ if (empty($peer_id) && $val['id']!= $id && $val['parent_id'] == $list[$id]['parent_id']){ $peer_id = $val['id']; break; } if (empty($top_id) && $val['id']!= $id && $val['parent_id'] == 0){ $top_id = $val['id']; } if (empty($any_id) && $val['id']!= $id){ $any_id = $val['id']; } } if ($peer_id){ $default_id = $peer_id; }else if($top_id){ $default_id = $top_id; }else{ $default_id = $any_id; } $is_true = $this->setIsDefault($default_id); } } if (!$is_true){ $this->error("设置失败,请检查二级域名不能为空!"); } Db::name('citysite')->where(['id'=>$id])->cache(true, null, "citysite")->update(['status'=>$status, 'update_time'=>getTime()]); $this->success("设置成功"); */ } /* * 设置默认区域 */ // private function setIsDefault($id){ // $id = intval($id); // $subdomain = Db::name('citysite')->where(['id'=>$id])->getField('domain'); // if ($this->web_citysite_open && empty($subdomain)) { //如果为开启状态,且二级域名为空,不允许设置 // return false; // } // $is_true = Db::name('citysite')->where(['id'=>$id])->update(['is_default'=>1, 'update_time'=>getTime()]); // if ($is_true){ // Db::name('citysite')->where(['id'=>['neq',$id]])->update(['is_default'=>0, 'update_time'=>getTime()]); // tpCache('site', ['site_default_home'=>$id]); // } // \think\Cache::clear('citysite'); // return $is_true; // } /* * 设置是否默认 */ // public function setSortOrder(){ // $id = input('id/d', 0); // $is_true = $this->setIsDefault($id); // if ($is_true){ // $this->success("设置成功"); // }else{ // $this->error("设置失败,请检查二级域名不能为空!"); // } // } //获取全部省份 private function get_site_province_all() { $result = Db::name('citysite')->field('id, name') ->where('level',1) ->order("sort_order asc, id asc") ->getAllWithIndex('id'); return $result; } /** * 获取子类列表 */ public function ajax_get_region($pid = 0, $level = 2, $siteid = '', $text = '--请选择--') { \think\Session::pause(); // 暂停session,防止session阻塞机制 $data = model('Citysite')->getList($pid,'*','',$level); $html = ""; foreach($data as $key=>$val){ if ($val['id'] == $siteid) { unset($data[$key]); continue; } $html.=""; } $isempty = 0; if (empty($data)){ $isempty = 1; } $this->success($html,'',['isempty'=>$isempty]); } /* * 获取区域列表(关联栏目) * pid 上级id * level 级别 * relevance 关联模型(表名称),为空时表示不关联 * text 不选择时显示text */ public function ajax_get_region_arc($pid = 0,$level = 1,$channel = '9', $text = '--请选择--') { \think\Session::pause(); // 暂停session,防止session阻塞机制 $regionIds = $this->getAllRegionIds($level,'',$channel); $data = Db::name('citysite')->field("*") ->where(["id"=>['in',$regionIds],'parent_id'=>$pid]) ->select(); if ($level == 1 && count($data) == 1){ //只存在一个省份 $html = ""; }else if ($level == 1){ $html = ""; }else{ $html = ""; } $this->success($html); } /* * 获取所有区域(id)集合 */ private function getAllRegionIds($level,$typeid = "",$channel = ""){ $field = "province_id"; if ($level == 2){ $field = "city_id"; }else if ($level == 3){ $field = "area_id"; } $where['status'] = 1; $where['is_del'] = 0; if (!empty($typeid)){ $where['typeid'] = ['in',$typeid]; }else if (!empty($channel)){ $where['channel'] = ['in',$channel]; } $regionIds = Db::name('archives')->where($where)->group($field)->getField($field,true); return $regionIds; } /** * 删除 */ public function del() { $id_arr = input('del_id/a'); $id_arr = eyIntval($id_arr); if(IS_POST && !empty($id_arr)){ // $count = Db::name('citysite')->where('parent_id','IN',$id_arr)->count(); // if ($count > 0){ // $this->error('所选区域有下级区域,请先删除下级区域'); // } $result = Db::name('citysite')->where([ 'id' => ['IN', $id_arr], ])->select(); $level = 0; $name_list = []; foreach ($result as $key => $val) { empty($level) && $level = $val['level']; $name_list[] = $val['name']; } $r = Db::name('citysite')->where([ 'id' => ['IN', $id_arr], ]) ->cache(true, null, "citysite") ->delete(); if($r !== false){ /*默认区域被删除,自动处理主站默认区域为空*/ $site_default_home = tpCache('global.site_default_home'); if (!empty($site_default_home) && in_array($site_default_home, $id_arr)) { tpCache('site', ['site_default_home'=>0]); } /*end*/ // 删除所有下级区域 if (2 == $level) { Db::name('citysite')->where([ 'parent_id' => ['IN', $id_arr], ]) ->cache(true, null, "citysite") ->delete(); } else if (1 == $level) { Db::name('citysite')->where([ 'topid' => ['IN', $id_arr], ]) ->cache(true, null, "citysite") ->delete(); } // extra_cache('global_get_site_province_list', null); // extra_cache('global_get_site_city_list', null); // extra_cache('global_get_site_area_list', null); adminLog('删除区域:'.implode(',', $name_list)); $this->success('删除成功'); } } $this->error('删除失败'); } /** * 判断子域名的唯一性 */ private function domain_unique($domain = '', $id = 0) { $result = Db::name('citysite')->field('id,domain')->getAllWithIndex('id'); if (!empty($result)) { if (0 < $id) unset($result[$id]); !empty($result) && $result = get_arr_column($result, 'domain'); } empty($result) && $result = []; $dirnames = Db::name('arctype')->column('dirname'); foreach ($dirnames as $key => $val) { $dirnames[$key] = strtolower($val); } $disableDirname = array_merge($this->disableDirname, $dirnames, $result); if (in_array(strtolower($domain), $disableDirname)) { return false; } return true; } /** * 生成随机子域名,确保唯一性 */ private function rand_domain($domain = '') { if (empty($domain)) { $domain = strtolower(get_rand_str(6, 0, 1)); } if (!$this->domain_unique($domain)) { $domain = $domain . mt_rand(0,9); return $this->rand_domain($domain); } return $domain; } /* * js打开获取子区域列表 */ public function ajaxSelectRegion(){ $list = Db::name("citysite")->where("status=1")->select(); $this->assign('list', $list); $this->assign('json_arctype_list', json_encode($list)); $func = input('func/s'); $assign_data['func'] = $func; $this->assign($assign_data); return $this->fetch(); } /* * js获取region */ public function ajaxGetOne($where = ""){ return Db::name('citysite')->where($where)->find(); } /** * 获取城市站点的所有上级区域id */ private function getParentCitysiteId($id){ $id = intval($id); static $regionArr = array(); static $countnext = 0; $countnext++; $regionArr[] = $id; if(!empty($id)){ $list = Db::name('citysite')->field('id,parent_id')->where('id',$id)->find(); if($list && $list['parent_id']!=0){ $this->getParentCitysiteId($list['parent_id']); } } $countnext--; $result = $regionArr; if($countnext == 0){ $regionArr = array(); } return $result; } /** * 获取区域的拼音 */ public function ajax_get_name_pinyin($name = '') { $pinyin = get_pinyin($name); $this->success('提取成功', null, ['pinyin'=>$pinyin]); } /** * 快速启用百强市 */ public function set_bqs_status() { $list = Db::name('citysite')->where(['level'=>['IN', [1,2]],'status'=>0])->select(); if (!empty($list)) { $where = []; $top_city_arr = []; foreach (self::$top_city as $key => $val) { $where[] = " `name` LIKE '{$key}%' "; $top_city_arr = array_merge($top_city_arr, $val); } $where_str = implode(' OR ', $where); $provinceList = Db::name('citysite')->field('id,name')->where(['level'=>1])->where($where_str)->select(); $province_ids = []; foreach ($provinceList as $key => $val) { foreach (self::$top_city as $_k => $_v) { if (stristr($val['name'], $_k)) { $provinceList[$_k] = $val; unset($provinceList[$key]); continue; } } $province_ids[] = $val['id']; } // 启用百强市涉及的省份 Db::name('citysite')->where(['id'=>['IN', $province_ids]])->update(['status'=>1,'update_time'=>getTime()]); // 启用百强市 foreach (self::$top_city as $key => $val) { $province_info = !empty($provinceList[$key]) ? $provinceList[$key] : []; if (empty($province_info)) { continue; } foreach ($val as $_k => $_v) { $where = []; foreach ($_v as $_k2 => $_v2) { $where[] = " `name` LIKE '{$_v2}%' "; } $where_str = implode(' OR ', $where); Db::name('citysite')->where([ 'level' => 2, 'parent_id' => $province_info['id'], ]) ->where($where_str) ->update(['status'=>1,'update_time'=>getTime()]); } } } $this->success('设置成功'); } /** * 一键全部启用/禁用 */ public function set_city_status() { if (IS_AJAX_POST) { $status = input('param.status/d'); $r = Db::name('citysite')->where([ 'status' => empty($status) ? 1 : 0, ])->update([ 'status' => empty($status) ? 0 : 1, 'update_time' => getTime(), ]); if ($r !== false) { delFile(RUNTIME_PATH); $this->success('操作成功'); } } $this->error('操作失败'); } /** * 批量设置地区 * @return [type] [description] */ public function batch_setcity() { if (IS_AJAX_POST) { $post = input('post.'); if (empty($post['ids'])) { $this->error('请至少勾选一个区域'); } $post['ids'] = str_replace(',', ',', $post['ids']); $ids = explode(',', $post['ids']); $inherit_province = !empty($post['inherit_province']) ? intval($post['inherit_province']) : 0; $inherit_city = !empty($post['inherit_city']) ? intval($post['inherit_city']) : 0; $inherit_area = !empty($post['inherit_area']) ? intval($post['inherit_area']) : 0; if (empty($inherit_province) && empty($inherit_city) && empty($inherit_area)) { $this->error('请勾选要操作的区域级别'); } $updateData = []; if (-1 < $post['is_open']) { $updateData['is_open'] = !empty($post['is_open']) ? intval($post['is_open']) : 0; } if (-1 < $post['showall']) { $updateData['showall'] = !empty($post['showall']) ? intval($post['showall']) : 0; } if (-1 < $post['status']) { $updateData['status'] = !empty($post['status']) ? intval($post['status']) : 0; } if (1 == $post['seoset']) { $updateData['seoset'] = 0; } else if (0 === $post['seoset']) { $updateData['seo_title'] = ''; $updateData['seo_keywords'] = ''; $updateData['seo_description'] = ''; } if (!empty($updateData)) { $updateData['update_time'] = getTime(); } else { // 都保持原设置了 $this->success('操作成功'); } $err = 0; // 在一级列表时操作区域 if ($post['level'] == 1) { // 设置一级区域 if (!empty($inherit_province)) { $r = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 1, ])->update($updateData); if ($r === false) $err++; } // 设置二级区域 if (!empty($inherit_city)) { $r = Db::name('citysite')->where([ 'parent_id' => ['IN', $ids], 'level' => 2, ])->update($updateData); if ($r === false) $err++; } // 设置三级区域 if (!empty($inherit_area)) { $cityids = Db::name('citysite')->where([ 'parent_id' => ['IN', $ids], 'level' => 2, ])->column('id'); if (!empty($cityids)) { $r = Db::name('citysite')->where([ 'parent_id' => ['IN', $cityids], 'level' => 3, ])->update($updateData); if ($r === false) $err++; } } } // 在二级列表时操作区域 else if ($post['level'] == 2) { // 设置一级区域 if (!empty($inherit_province)) { $parent_ids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 2, ])->column('parent_id'); $r = Db::name('citysite')->where([ 'id' => ['IN', $parent_ids], 'level' => 1, ])->update($updateData); if ($r === false) $err++; } // 设置二级区域 if (!empty($inherit_city)) { $r = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 2, ])->update($updateData); if ($r === false) $err++; } // 设置三级区域 if (!empty($inherit_area)) { $r = Db::name('citysite')->where([ 'parent_id' => ['IN', $ids], 'level' => 3, ])->update($updateData); if ($r === false) $err++; } } // 在三级列表时操作区域 else if ($post['level'] == 3) { // 设置一级区域 if (!empty($inherit_province)) { $topids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->column('topid'); $r = Db::name('citysite')->where([ 'id' => ['IN', $topids], 'level' => 1, ])->update($updateData); if ($r === false) $err++; } // 设置二级区域 if (!empty($inherit_city)) { $parent_ids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->column('parent_id'); $r = Db::name('citysite')->where([ 'id' => ['IN', $parent_ids], 'level' => 2, ])->update($updateData); if ($r === false) $err++; } // 设置三级区域 if (!empty($inherit_area)) { $r = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->update($updateData); if ($r === false) $err++; } } if (empty($err)) { adminLog('批量设置区域-id:'.$post['ids']); $this->success('操作成功'); } else { $this->error('操作失败'); } } $level = input('param.level/d', 0); $level++; $assign_data = []; $assign_data['level'] = $level; $this->assign($assign_data); return $this->fetch(); } /** * 批量设置SEO * @return [type] [description] */ public function batch_setcityseo() { if (IS_AJAX_POST) { $post = input('post.'); if (empty($post['ids'])) { $this->error('请至少勾选一个区域'); } $post['ids'] = str_replace(',', ',', $post['ids']); $ids = explode(',', $post['ids']); $inherit_province = !empty($post['inherit_province']) ? intval($post['inherit_province']) : 0; $inherit_city = !empty($post['inherit_city']) ? intval($post['inherit_city']) : 0; $inherit_area = !empty($post['inherit_area']) ? intval($post['inherit_area']) : 0; if (empty($inherit_province) && empty($inherit_city) && empty($inherit_area)) { $this->error('请勾选要操作的区域级别'); } $err = 0; // 在一级列表时操作区域 if ($post['level'] == 1) { // 设置一级区域 if (!empty($inherit_province)) { $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $ids], 'level' => 1, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置二级区域 if (!empty($inherit_city)) { $list = Db::name('citysite')->field('id,name')->where([ 'parent_id' => ['IN', $ids], 'level' => 2, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置三级区域 if (!empty($inherit_area)) { $cityids = Db::name('citysite')->where([ 'parent_id' => ['IN', $ids], 'level' => 2, ])->column('id'); if (!empty($cityids)) { $list = Db::name('citysite')->field('id,name')->where([ 'parent_id' => ['IN', $cityids], 'level' => 3, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } } } // 在二级列表时操作区域 else if ($post['level'] == 2) { // 设置一级区域 if (!empty($inherit_province)) { $parent_ids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 2, ])->column('parent_id'); $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $parent_ids], 'level' => 1, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置二级区域 if (!empty($inherit_city)) { $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $ids], 'level' => 2, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置三级区域 if (!empty($inherit_area)) { $list = Db::name('citysite')->field('id,name')->where([ 'parent_id' => ['IN', $ids], 'level' => 3, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } } // 在三级列表时操作区域 else if ($post['level'] == 3) { // 设置一级区域 if (!empty($inherit_province)) { $topids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->column('topid'); $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $topids], 'level' => 1, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置二级区域 if (!empty($inherit_city)) { $parent_ids = Db::name('citysite')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->column('parent_id'); $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $parent_ids], 'level' => 2, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } // 设置三级区域 if (!empty($inherit_area)) { $list = Db::name('citysite')->field('id,name')->where([ 'id' => ['IN', $ids], 'level' => 3, ])->select(); $this->batch_setcityseo_save($err, $list, $post); } } if (empty($err)) { adminLog('批量设置区域-id:'.$post['ids']); $this->success('操作成功'); } else { $this->error('操作失败'); } } $level = input('param.level/d', 0); $level++; $assign_data = []; $assign_data['level'] = $level; $this->assign($assign_data); return $this->fetch(); } /** * 批量设置SEO - 统一更新数据 * @param [type] &$err [description] * @param array $list [description] * @param array $post [description] * @return [type] [description] */ private function batch_setcityseo_save(&$err, $list = [], $post = []) { if (!empty($list)) { $seo_title = !empty($post['seo_title']) ? trim($post['seo_title']) : ''; $seo_keywords = !empty($post['seo_keywords']) ? trim($post['seo_keywords']) : ''; $seo_description = !empty($post['seo_description']) ? trim($post['seo_description']) : ''; $updateData = []; foreach ($list as $key => $val) { $updateData[] = [ 'id' => $val['id'], 'seo_title' => str_replace(['{region}','{区域}'], $val['name'], $seo_title), 'seo_keywords' => str_replace(['{region}','{区域}'], $val['name'], $seo_keywords), 'seo_description' => str_replace(['{region}','{区域}'], $val['name'], $seo_description), 'update_time' => getTime(), ]; } $r = model('Citysite')->saveAll($updateData); if ($r === false) $err++; } } /** * 获取地区表ey_region的城市列表 */ public function ajax_get_region_list($pid = 0, $level = 2, $region_id = '', $text = '--请选择--') { if ($pid == 1) { // 北京市 $pid = 2; $level = 3; } else if ($pid == 338) { // 天津市 $pid = 339; $level = 3; } else if ($pid == 10543) { // 上海市 $pid = 10544; $level = 3; } else if ($pid == 31929) { // 重庆市 $pid = [31930,32380]; $level = 3; } $data = model('Region')->getList($pid,'*','',$level); $html = ""; foreach($data as $key=>$val){ if ($val['id'] == $region_id) { unset($data[$key]); continue; } // 当区域名称大于2两个字是,就去除末尾指定的字 if (strlen($val['name']) >= 9) { $val['name'] = preg_replace('/(省|市|县|区|乡|镇|旗|州|农场)$/i', '', $val['name']); } $html.=""; } $isempty = 0; if (empty($data)){ $isempty = 1; } $this->success($html,'',['isempty'=>$isempty]); } /** * 处理区域的末尾多余文字 * @param string $name [description] * @return [type] [description] */ private function handle_name($name = '') { // 当区域名称大于2两个字是,就去除末尾指定的字 if (strlen($name) >= 9) { $name = preg_replace('/(地区|壮族自治区|维吾尔自治区|回族自治区|自治区|市辖区|特别行政区)$/i', '', $name); $name = preg_replace('/(省|市|县|区|乡|镇|旗|州|盟|行政单位|街道)$/i', '', $name); } return $name; } /** * 一键导入全国城市 * @return [type] [description] */ public function import_city() { //防止数据过程超时 function_exists('set_time_limit') && set_time_limit(0); @ini_set('memory_limit','-1'); if (IS_POST) { $post = input('post.'); $province_name = ''; $province_id = !empty($post['province_id']) ? intval($post['province_id']) : 0; $cur_province_id = input('param.cur_province_id/d', 0); if (!empty($cur_province_id)) { $province_id = $cur_province_id; } $city_name = ''; $city_id = !empty($post['city_id']) ? intval($post['city_id']) : 0; $seo_title = !empty($post['seo_title']) ? trim($post['seo_title']) : ''; $seo_keywords = !empty($post['seo_keywords']) ? trim($post['seo_keywords']) : ''; $seo_description = !empty($post['seo_description']) ? trim($post['seo_description']) : ''; /*---------------------读取要导入的城市列表 start---------------------*/ if (empty($province_id)) { // 导入全国城市 $level = 1; $parent_id = 0; $topid = 0; $regionList = Db::name('region')->order('level asc, parent_id asc, id asc')->select(); $regionList = group_same_key($regionList, 'level'); // 北京、天津、上海、重庆,这四个省级市的二级删掉、三级区域转成二级 foreach ($regionList[2] as $key => $val) { if ($val['id'] == 2) { // 北京市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,1 as parent_id,initial')->where(['parent_id'=>2])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 339) { // 天津市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,338 as parent_id,initial')->where(['parent_id'=>339])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 10544) { // 上海市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,10543 as parent_id,initial')->where(['parent_id'=>10544])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 31930) { // 重庆市 - 市 unset($regionList[2][0]); $row = Db::name('region')->field('id,name,2 as level,31929 as parent_id,initial')->where(['parent_id'=>31930])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 32380) { // 重庆市 - 县 unset($regionList[2][0]); $row = Db::name('region')->field('id,name,2 as level,31929 as parent_id,initial')->where(['parent_id'=>32380])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } } // 北京、天津、上海、重庆,这四个省级市的三级删掉 foreach ($regionList[3] as $key => $val) { if (in_array($val['parent_id'], [2,339,10544,31930,32380])) { unset($regionList[3][$key]); } } } else if (!empty($province_id) && empty($city_id)) { // 导入指定当前省份和下级的全部市县 // 要导入的省份名称 $province_name = Db::name('region')->where(['id'=>$province_id])->value('name'); $province_name = preg_replace('/(省|市)$/i', '', $province_name); $level = 2; $parent_id = (int)Db::name('citysite')->where(['level'=>1,'name'=>['LIKE', "{$province_name}%"]])->value('id'); $topid = $parent_id; $region_ids = [$province_id]; $city_ids = Db::name('region')->where(['parent_id'=>$province_id])->column('id'); if (!empty($city_ids)) { $region_ids = array_merge($region_ids, $city_ids); $area_ids = Db::name('region')->where(['parent_id'=>['IN', $city_ids]])->column('id'); !empty($area_ids) && $region_ids = array_merge($region_ids, $area_ids); } $regionList = Db::name('region')->where(['id'=>['IN', $region_ids]])->order('level asc, parent_id asc, id asc')->select(); $regionList = group_same_key($regionList, 'level'); // 北京、天津、上海、重庆,这四个省级市的二级删掉、三级区域转成二级 foreach ($regionList[2] as $key => $val) { if ($val['id'] == 2) { // 北京市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,1 as parent_id,initial')->where(['parent_id'=>2])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 339) { // 天津市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,338 as parent_id,initial')->where(['parent_id'=>339])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 10544) { // 上海市 unset($regionList[2][$key]); $row = Db::name('region')->field('id,name,2 as level,10543 as parent_id,initial')->where(['parent_id'=>10544])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 31930) { // 重庆市 - 市 unset($regionList[2][0]); $row = Db::name('region')->field('id,name,2 as level,31929 as parent_id,initial')->where(['parent_id'=>31930])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } else if ($val['id'] == 32380) { // 重庆市 - 县 unset($regionList[2][0]); $row = Db::name('region')->field('id,name,2 as level,31929 as parent_id,initial')->where(['parent_id'=>32380])->order('id asc')->select(); $regionList[2] = array_merge($regionList[2], $row); } } // 北京、天津、上海、重庆,这四个省级市的三级删掉 foreach ($regionList[3] as $key => $val) { if (in_array($val['parent_id'], [2,339,10544,31930,32380])) { unset($regionList[3][$key]); } } } else if (!empty($province_id) && !empty($city_id)) { // 导入指定当前省份和下级的全部市县 $row = Db::name('region')->where(['id'=>['IN', [$province_id, $city_id]]])->getAllWithIndex('id'); // 要导入的省份名称 $province_name = preg_replace('/(省|市)$/i', '', $row[$province_id]['name']); // 要导入的二级城市名称 $city_name = $this->handle_name($row[$province_id]['name']); $level = 3; $topid = (int)Db::name('citysite')->where(['level'=>1,'name'=>['LIKE', "{$province_name}%"]])->value('id'); $parent_id = (int)Db::name('citysite')->where(['parent_id'=>$topid,'level'=>2,'name'=>['LIKE', "{$city_name}%"]])->value('id'); $region_ids = [$province_id, $city_id]; $area_ids = Db::name('region')->where(['parent_id'=>$city_id])->column('id'); !empty($area_ids) && $region_ids = array_merge($region_ids, $area_ids); $regionList = Db::name('region')->where(['id'=>['IN', $region_ids]])->order('level asc, parent_id asc, id asc')->select(); $regionList = group_same_key($regionList, 'level'); // 北京、天津、上海、重庆,这四个省级市的三级删掉 foreach ($regionList[3] as $key => $val) { if (in_array($val['parent_id'], [2,339,10544,31930,32380])) { unset($regionList[3][$key]); } } } /*---------------------读取要导入的城市列表 end---------------------*/ /*---------------------多城市站点的树形结构、每个层级的结构 start---------------------*/ $tree_site = $province_site = $city_site = $area_site = $domainArr = []; $arr1 = $arr2 = $arr3 = $arr4 = []; $row = Db::name('citysite')->field('id,name,parent_id,topid,level,domain')->order('level asc, parent_id asc, id asc')->select(); foreach ($row as $key => $val) { $domainArr[] = $val['domain']; $val['name'] = $this->handle_name($val['name']); if ($val['level'] == 1) { $val['child'] = []; $arr1[$val['id']] = $val; $province_site[$val['name']] = $val; $tree_site[$val['name']] = $val; } else if ($val['level'] == 2) { $val['child'] = []; $arr2[$val['parent_id']][$val['id']] = $val; $arr4[$val['id']] = $val; $parent_info = $arr1[$val['parent_id']]; $city_site[$parent_info['name']][$val['name']] = $val; $tree_site[$parent_info['name']]['child'][$val['name']] = $val; } else if ($val['level'] == 3) { $val['child'] = []; $arr3[$val['parent_id']][$val['id']] = $val; $parent_info = $arr4[$val['parent_id']]; $top_info = $arr1[$val['topid']]; $area_site[$top_info['name']][$parent_info['name']][$val['name']] = $val; $tree_site[$top_info['name']]['child'][$parent_info['name']]['child'][$val['name']] = $val; } } /*---------------------多城市站点的树形结构、每个层级的结构 end---------------------*/ $err = 0; // 批量添加一级区域 if (!empty($regionList[1])) { $nameArr = []; foreach ($regionList[1] as $key => $val) { $is_add = true; foreach ($province_site as $_k => $_v) { if (stristr($val['name'], $_v['name'])) { $is_add = false; break; } } if ($is_add) { $nameArr[] = $this->handle_name($val['name']); } } if (!empty($nameArr)) { $addData = []; foreach ($nameArr as $key => $val) { $domain = preg_replace("/[^a-zA-Z0-9]+/", "", get_pinyin($val)); if (in_array($domain, $domainArr)) { $domain = $this->rand_domain($domain); } $addData[] = [ 'name' => $val, 'domain' => $domain, 'level' => 1, 'parent_id' => 0, 'topid' => 0, 'is_open' => !empty($post['is_open']) ? intval($post['is_open']) : 0, 'showall' => !empty($post['showall']) ? intval($post['showall']) : 1, 'seoset' => !empty($post['seoset']) ? intval($post['seoset']) : 0, 'status' => !empty($post['status']) ? intval($post['status']) : 0, 'initial' => getFirstCharter($val), 'seo_title' => str_replace(['{region}','{区域}'], $val, $seo_title), 'seo_keywords' => str_replace(['{region}','{区域}'], $val, $seo_keywords), 'seo_description' => str_replace(['{region}','{区域}'], $val, $seo_description), 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; } $r = model('Citysite')->saveAll($addData); if ($r === false) { $err++; } else { foreach ($r as $k1 => $v1) { $arr_new = $v1->getData(); $arr_new['child'] = []; $arr1[$arr_new['id']] = $arr_new; $province_site[$arr_new['name']] = $arr_new; $tree_site[$arr_new['name']] = $arr_new; } } } } // 批量添加二级区域 if (empty($err) && !empty($regionList[2])) { $province_region = Db::name('region')->where(['level'=>1])->getAllWithIndex('id'); $nameArr = $parent_ids_arr = []; foreach ($regionList[2] as $key => $val) { $is_add = true; $parent_info = $province_region[$val['parent_id']]; $parent_info['name'] = $this->handle_name($parent_info['name']); foreach ($city_site[$parent_info['name']] as $_k => $_v) { if (stristr($val['name'], $_v['name'])) { $is_add = false; break; } } if ($is_add) { $nameArr[] = $this->handle_name($val['name']); $parent_name = $parent_info['name']; $parent_ids_arr[] = $province_site[$parent_name]['id']; } } if (!empty($nameArr)) { $addData = []; $domainArr = Db::name('citysite')->where(['id'=>['gt', 0]])->column('domain'); foreach ($nameArr as $key => $val) { $domain = preg_replace("/[^a-zA-Z0-9]+/", "", get_pinyin($val)); if (in_array($domain, $domainArr)) { $domain = $this->rand_domain($domain); } $addData[] = [ 'name' => $val, 'domain' => $domain, 'level' => 2, 'parent_id' => $parent_ids_arr[$key], 'topid' => $parent_ids_arr[$key], 'is_open' => !empty($post['is_open']) ? intval($post['is_open']) : 0, 'showall' => !empty($post['showall']) ? intval($post['showall']) : 1, 'seoset' => !empty($post['seoset']) ? intval($post['seoset']) : 0, 'status' => !empty($post['status']) ? intval($post['status']) : 0, 'initial' => getFirstCharter($val), 'seo_title' => str_replace(['{region}','{区域}'], $val, $seo_title), 'seo_keywords' => str_replace(['{region}','{区域}'], $val, $seo_keywords), 'seo_description' => str_replace(['{region}','{区域}'], $val, $seo_description), 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; } $r = model('Citysite')->saveAll($addData); if ($r === false) { $err++; } else { foreach ($r as $k1 => $v1) { $arr_new = $v1->getData(); $arr_new['child'] = []; $arr2[$arr_new['parent_id']][$arr_new['id']] = $arr_new; $parent_info = $arr1[$arr_new['parent_id']]; $city_site[$parent_info['name']][$arr_new['name']] = $arr_new; $tree_site[$parent_info['name']]['child'][$arr_new['name']] = $arr_new; } } } } // 批量添加三级区域 if (empty($err) && !empty($regionList[3])) { $province_region = Db::name('region')->where(['level'=>1])->getAllWithIndex('id'); $city_region = Db::name('region')->where(['level'=>2])->getAllWithIndex('id'); $nameArr = $topids_arr = $parent_ids_arr = []; foreach ($regionList[3] as $key => $val) { $is_add = true; $parent_info = $city_region[$val['parent_id']]; $parent_info['name'] = $this->handle_name($parent_info['name']); $top_info = $province_region[$parent_info['parent_id']]; $top_info['name'] = $this->handle_name($top_info['name']); foreach ($area_site[$top_info['name']][$parent_info['name']] as $_k => $_v) { if (stristr($val['name'], $_v['name'])) { $is_add = false; break; } } if ($is_add) { $handle_name = $this->handle_name($val['name']); if (!empty($handle_name)) { $nameArr[] = $handle_name; $top_name = $top_info['name']; $topids_arr[] = $province_site[$top_name]['id']; $parent_name = $parent_info['name']; $parent_ids_arr[] = $city_site[$top_name][$parent_name]['id']; } } } if (!empty($nameArr)) { $batch_num = 500; // 每次写入N条区域,避免写太多报500 $nameArr = array_chunk($nameArr, $batch_num); $topids_arr = array_chunk($topids_arr, $batch_num); $parent_ids_arr = array_chunk($parent_ids_arr, $batch_num); foreach ($nameArr as $key_tmp => $val_tmp) { if (!empty($val_tmp)) { $addData = []; $domainArr = Db::name('citysite')->where(['id'=>['gt', 0]])->column('domain'); foreach ($val_tmp as $key => $val) { $domain = preg_replace("/[^a-zA-Z0-9]+/", "", get_pinyin($val)); if (in_array($domain, $domainArr)) { $domain = $this->rand_domain($domain); } $addData[] = [ 'name' => $val, 'domain' => $domain, 'level' => 3, 'parent_id' => $parent_ids_arr[$key_tmp][$key], 'topid' => $topids_arr[$key_tmp][$key], 'is_open' => !empty($post['is_open']) ? intval($post['is_open']) : 0, 'showall' => !empty($post['showall']) ? intval($post['showall']) : 1, 'seoset' => !empty($post['seoset']) ? intval($post['seoset']) : 0, 'status' => !empty($post['status']) ? intval($post['status']) : 0, 'initial' => getFirstCharter($val), 'seo_title' => str_replace(['{region}','{区域}'], $val, $seo_title), 'seo_keywords' => str_replace(['{region}','{区域}'], $val, $seo_keywords), 'seo_description' => str_replace(['{region}','{区域}'], $val, $seo_description), 'sort_order' => 100, 'add_time' => getTime(), 'update_time' => getTime(), ]; } $r = model('Citysite')->saveAll($addData); if ($r === false) { $err++; } } } } } if (empty($err)) { $data = []; // 导入全国的轮询一个个省份导入 start if (!empty($cur_province_id)) { $data['progress'] = 0; $data['next_province_id'] = 0; $num = 0; $regionRow = Db::name('region')->where(['level'=>1])->order('id asc')->select(); foreach ($regionRow as $key => $val) { $num++; if ($cur_province_id < $val['id']) { $data['next_province_id'] = $val['id']; break; } } $progress = $num / count($regionRow); $progress = sprintf("%.2f", substr(sprintf("%.3f", $progress), 0, -1)); if ($progress == intval($progress)) { $progress = intval($progress); } $data['progress'] = intval($progress * 100); } // 导入全国的轮询一个个省份导入 end Cache::clear('citysite'); adminLog('一键导入全国城市'); $this->success("操作成功", null, $data); }else{ $this->error("操作失败"); } exit; } $assign_data = []; $province_list = Db::name('region')->field('id, name') ->where('level',1) ->select(); foreach ($province_list as $key => $val) { $val['name'] = preg_replace('/(省|市)$/i', '', $val['name']); $province_list[$key] = $val; } $assign_data['province_list'] = $province_list; $this->assign($assign_data); return $this->fetch(); } }