Discuz! X3 注册资料中地区项目根据访问IP自动选择的方法
分类 网站技术/村民张先生 发布于 2017-05-05 03:18
按以下方法修改后,用户打开注册页面或资料修改页面时,如果含有地区选择项目,将自动根据用户IP位置选择省市。
打开 source/function/function_profile.php 文件,
查找:
function showdistrict($values, $elems=array(), $container='districtbox', $showlevel=null, $containertype = 'birth') {
在其下方第一行新增:
global $_G;
查找:
for($i=0;$i<$showlevel;$i++) { $level = $i+1; if(!empty($options[$level])) { $jscall = "showdistrict('$container', ['$elems[0]', '$elems[1]', '$elems[2]', '$elems[3]'], $showlevel, $level, '$containertype')"; $html .= '<select name="'.$elems[$i].'" id="'.$elems[$i].'" class="ps" onchange="'.$jscall.'" tabindex="1">'; $html .= '<option value="">'.lang('spacecp', 'district_level_'.$level).'</option>'; foreach($options[$level] as $option) { $selected = $option[0] == $values[$i] ? ' selected="selected"' : ''; $html .= '<option did="'.$option[0].'" value="'.$option[1].'"'.$selected.'>'.$option[1].'</option>'; } $html .= '</select>'; $html .= ' '; } }
替换为(如果后台设置了自定义注册地址,请修改以下代码中的 mod=register):
include_once libfile('function_misc', 'function'); $diliweizhi = explode(" ", substr(convertip($_G['clientip']), 2)); $diliweizhi = $diliweizhi[0]; if(preg_match('/^(?P<sheng>北京|上海|天津|重庆)市/', $diliweizhi, $weizhifenchai)) { $sheng = $weizhifenchai[sheng]; $shi = preg_match('/市(?P<shi>.{4,}?)(区|县)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : ''; } elseif(preg_match('/^(?P<sheng>广西|内蒙古|宁夏|新疆|西藏)/', $diliweizhi, $weizhifenchai)) { $sheng = $weizhifenchai[sheng]; $shi = preg_match('/^(广西|内蒙古|宁夏|新疆|西藏)(.*自治区)*(?P<shi>.{4,}?)(市|州|地区|盟)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : ''; } elseif(preg_match('/^(?P<sheng>.*?)省/', $diliweizhi, $weizhifenchai)) { $sheng = $weizhifenchai[sheng]; $shi = preg_match('/省(?P<shi>.{4,}?)(市|州|地区)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : ''; } elseif(preg_match('/^(?P<sheng>香港|澳门|台湾)/', $diliweizhi, $weizhifenchai)) { $sheng = $weizhifenchai[sheng]; $shi = ''; } elseif(preg_match('/^(?P<sheng>美国|加拿大|马来西亚|新加坡|越南|泰国|印度|日本|韩国|瑞典|挪威|希腊|瑞士|荷兰|捷克|德国|法国|意大利|奥地利|西班牙|英国|俄罗斯|乌克兰|新西兰|澳大利亚|丹麦|芬兰|爱尔兰|南非|阿根廷|巴西)/', $diliweizhi, $weizhifenchai)) { $sheng = '海外'; $shi = $weizhifenchai[sheng]; } for($i=0;$i<$showlevel;$i++) { $level = $i+1; if(!empty($options[$level])) { $jscall = "showdistrict('$container', ['$elems[0]', '$elems[1]', '$elems[2]', '$elems[3]'], $showlevel, $level, '$containertype')"; $display = $level == 4 ? ' style="display:none;"' : ''; $html .= '<select name="'.$elems[$i].'" id="'.$elems[$i].'" class="ps" onchange="'.$jscall.'" tabindex="1"'.$display.'>'; $html .= '<option value="">'.lang('spacecp', 'district_level_'.$level).'</option>'; foreach($options[$level] as $option) { $autoselect = CURMODULE == 'register' || (CURMODULE == 'spacecp' && $_GET[ac] == 'profile') || ($_GET[pid] > '0' && $_GET[inajax] == '1' && preg_match("/zhuce|mod=register|ac=profile/", $_SERVER['HTTP_REFERER'])) ? 1 : 0; //仅在 注册页、个人资料页 输出和切换(依赖REFERER)时自动选择 if($level == 4) { $html .= '<option did="'.$option[0].'" value="'.$option[1].'" selected="selected">'.$option[1].'</option>'; break; } elseif($autoselect && $showlevel == 1 && substr($option[1], 0, 4) == substr($sheng, 0, 4)) { $selected = ' selected="selected"'; $onchange = $elems[$i]; } elseif($autoselect && $showlevel == 2 && substr($option[1], 0, 4) == substr($shi, 0, 4)) { $selected = ' selected="selected"'; $onchange = $elems[$i]; } else { $selected = $option[0] == $values[$i] ? ' selected="selected"' : ''; } $html .= '<option did="'.$option[0].'" value="'.$option[1].'"'.$selected.'>'.$option[1].'</option>'; } $html .= '</select>'; if($onchange) $html .= '<script type="text/javascript">if('.$onchange.'.fireEvent){'.$onchange.'.fireEvent(\''.$onchange.'\');}else{'.$onchange.'.onchange();}</script>'; $html .= ' '; } }
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截