mt 发表于 2019-1-12 20:56:55

Discuz! X3 注册资料中地区项目根据访问IP自动选择的方法

用户打开注册页面或资料修改页面时,如果含有地区选择项目,将自动根据用户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', '$elems', '$elems', '$elems'], $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 == $values[$i] ? ' selected="selected"' : '';
                                $html .= '<option did="'.$option.'" value="'.$option.'"'.$selected.'>'.$option.'</option>';
                        }
                        $html .= '</select>';
                        $html .= '';
                }
        }替换为(如果后台设置了自定义注册地址,请修改以下代码中的 mod=register):
include_once libfile('function_misc', 'function');
        $diliweizhi = explode(" ", substr(convertip($_G['clientip']), 2));
        $diliweizhi = $diliweizhi;
        if(preg_match('/^(?P<sheng>北京|上海|天津|重庆)市/', $diliweizhi, $weizhifenchai)) {
                $sheng = $weizhifenchai;
                $shi = preg_match('/市(?P<shi>.{4,}?)(区|县)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai : '';
        } elseif(preg_match('/^(?P<sheng>广西|内蒙古|宁夏|新疆|西藏)/', $diliweizhi, $weizhifenchai)) {
                $sheng = $weizhifenchai;
                $shi = preg_match('/^(广西|内蒙古|宁夏|新疆|西藏)(.*自治区)*(?P<shi>.{4,}?)(市|州|地区|盟)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai : '';
        } elseif(preg_match('/^(?P<sheng>.*?)省/', $diliweizhi, $weizhifenchai)) {
                $sheng = $weizhifenchai;
                $shi = preg_match('/省(?P<shi>.{4,}?)(市|州|地区)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai : '';
        } elseif(preg_match('/^(?P<sheng>香港|澳门|台湾)/', $diliweizhi, $weizhifenchai)) {
                $sheng = $weizhifenchai; $shi = '';
        } elseif(preg_match('/^(?P<sheng>美国|加拿大|马来西亚|新加坡|越南|泰国|印度|日本|韩国|瑞典|挪威|希腊|瑞士|荷兰|捷克|德国|法国|意大利|奥地利|西班牙|英国|俄罗斯|乌克兰|新西兰|澳大利亚|丹麦|芬兰|爱尔兰|南非|阿根廷|巴西)/', $diliweizhi, $weizhifenchai)) {
                $sheng = '海外'; $shi = $weizhifenchai;
        }

        for($i=0;$i<$showlevel;$i++) {
                $level = $i+1;
                if(!empty($options[$level])) {
                        $jscall = "showdistrict('$container', ['$elems', '$elems', '$elems', '$elems'], $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 == 'profile') || ($_GET > '0' && $_GET == '1' && preg_match("/zhuce|mod=register|ac=profile/", $_SERVER['HTTP_REFERER'])) ? 1 : 0; //仅在 注册页、个人资料页 输出和切换(依赖REFERER)时自动选择
                                if($level == 4) {
                                        $html .= '<option did="'.$option.'" value="'.$option.'" selected="selected">'.$option.'</option>';
                                        break;
                                } elseif($autoselect && $showlevel == 1 && substr($option, 0, 4) == substr($sheng, 0, 4)) {
                                        $selected = ' selected="selected"';
                                        $onchange = $elems[$i];
                                } elseif($autoselect && $showlevel == 2 && substr($option, 0, 4) == substr($shi, 0, 4)) {
                                        $selected = ' selected="selected"';
                                        $onchange = $elems[$i];
                                } else {
                                        $selected = $option == $values[$i] ? ' selected="selected"' : '';
                                }
                                $html .= '<option did="'.$option.'" value="'.$option.'"'.$selected.'>'.$option.'</option>';
                        }
                        $html .= '</select>';
                        if($onchange) $html .= '<script type="text/javascript">if('.$onchange.'.fireEvent){'.$onchange.'.fireEvent(\''.$onchange.'\');}else{'.$onchange.'.onchange();}</script>';
                        $html .= '';
                }
        }

页: [1]
查看完整版本: Discuz! X3 注册资料中地区项目根据访问IP自动选择的方法