密通学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6115|回复: 0

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

[复制链接]

282

主题

27

回帖

8万

铜板

超级版主

Rank: 8Rank: 8

积分
89153
QQ
发表于 2019-1-12 20:56:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用户打开注册页面或资料修改页面时,如果含有地区选择项目,将自动根据用户IP位置选择省市。修改方法如下:

打开 source/function/function_profile.php 文件,

查找:

  1. function showdistrict($values, $elems=array(), $container='districtbox', $showlevel=null, $containertype = 'birth') {
复制代码
在其下方第一行新增:
  1. global $_G;
复制代码
查找:
  1. for($i=0;$i<$showlevel;$i++) {
  2.                 $level = $i+1;
  3.                 if(!empty($options[$level])) {
  4.                         $jscall = "showdistrict('$container', ['$elems[0]', '$elems[1]', '$elems[2]', '$elems[3]'], $showlevel, $level, '$containertype')";
  5.                         $html .= '<select name="'.$elems[$i].'" id="'.$elems[$i].'" class="ps" onchange="'.$jscall.'" tabindex="1">';
  6.                         $html .= '<option value="">'.lang('spacecp', 'district_level_'.$level).'</option>';
  7.                         foreach($options[$level] as $option) {
  8.                                 $selected = $option[0] == $values[$i] ? ' selected="selected"' : '';
  9.                                 $html .= '<option did="'.$option[0].'" value="'.$option[1].'"'.$selected.'>'.$option[1].'</option>';
  10.                         }
  11.                         $html .= '</select>';
  12.                         $html .= '  ';
  13.                 }
  14.         }
复制代码
替换为(如果后台设置了自定义注册地址,请修改以下代码中的 mod=register):
  1. include_once libfile('function_misc', 'function');
  2.         $diliweizhi = explode(" ", substr(convertip($_G['clientip']), 2));
  3.         $diliweizhi = $diliweizhi[0];
  4.         if(preg_match('/^(?P<sheng>北京|上海|天津|重庆)市/', $diliweizhi, $weizhifenchai)) {
  5.                 $sheng = $weizhifenchai[sheng];
  6.                 $shi = preg_match('/市(?P<shi>.{4,}?)(区|县)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : '';
  7.         } elseif(preg_match('/^(?P<sheng>广西|内蒙古|宁夏|新疆|西藏)/', $diliweizhi, $weizhifenchai)) {
  8.                 $sheng = $weizhifenchai[sheng];
  9.                 $shi = preg_match('/^(广西|内蒙古|宁夏|新疆|西藏)(.*自治区)*(?P<shi>.{4,}?)(市|州|地区|盟)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : '';
  10.         } elseif(preg_match('/^(?P<sheng>.*?)省/', $diliweizhi, $weizhifenchai)) {
  11.                 $sheng = $weizhifenchai[sheng];
  12.                 $shi = preg_match('/省(?P<shi>.{4,}?)(市|州|地区)/', $diliweizhi, $weizhifenchai) ? $weizhifenchai[shi] : '';
  13.         } elseif(preg_match('/^(?P<sheng>香港|澳门|台湾)/', $diliweizhi, $weizhifenchai)) {
  14.                 $sheng = $weizhifenchai[sheng]; $shi = '';
  15.         } elseif(preg_match('/^(?P<sheng>美国|加拿大|马来西亚|新加坡|越南|泰国|印度|日本|韩国|瑞典|挪威|希腊|瑞士|荷兰|捷克|德国|法国|意大利|奥地利|西班牙|英国|俄罗斯|乌克兰|新西兰|澳大利亚|丹麦|芬兰|爱尔兰|南非|阿根廷|巴西)/', $diliweizhi, $weizhifenchai)) {
  16.                 $sheng = '海外'; $shi = $weizhifenchai[sheng];
  17.         }

  18.         for($i=0;$i<$showlevel;$i++) {
  19.                 $level = $i+1;
  20.                 if(!empty($options[$level])) {
  21.                         $jscall = "showdistrict('$container', ['$elems[0]', '$elems[1]', '$elems[2]', '$elems[3]'], $showlevel, $level, '$containertype')";
  22.                         $display = $level == 4 ? ' style="display:none;"' : '';
  23.                         $html .= '<select name="'.$elems[$i].'" id="'.$elems[$i].'" class="ps" onchange="'.$jscall.'" tabindex="1"'.$display.'>';
  24.                         $html .= '<option value="">'.lang('spacecp', 'district_level_'.$level).'</option>';
  25.                         foreach($options[$level] as $option) {
  26.                                 $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)时自动选择
  27.                                 if($level == 4) {
  28.                                         $html .= '<option did="'.$option[0].'" value="'.$option[1].'" selected="selected">'.$option[1].'</option>';
  29.                                         break;
  30.                                 } elseif($autoselect && $showlevel == 1 && substr($option[1], 0, 4) == substr($sheng, 0, 4)) {
  31.                                         $selected = ' selected="selected"';
  32.                                         $onchange = $elems[$i];
  33.                                 } elseif($autoselect && $showlevel == 2 && substr($option[1], 0, 4) == substr($shi, 0, 4)) {
  34.                                         $selected = ' selected="selected"';
  35.                                         $onchange = $elems[$i];
  36.                                 } else {
  37.                                         $selected = $option[0] == $values[$i] ? ' selected="selected"' : '';
  38.                                 }
  39.                                 $html .= '<option did="'.$option[0].'" value="'.$option[1].'"'.$selected.'>'.$option[1].'</option>';
  40.                         }
  41.                         $html .= '</select>';
  42.                         if($onchange) $html .= '<script type="text/javascript">if('.$onchange.'.fireEvent){'.$onchange.'.fireEvent(\''.$onchange.'\');}else{'.$onchange.'.onchange();}</script>';
  43.                         $html .= '  ';
  44.                 }
  45.         }
复制代码


如果您有业务需求,可以和我联系:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

首页|Archiver|手机版|小黑屋|密通学院:专业网络营销服务商

GMT+8, 2024-12-22 19:42 , Processed in 0.088867 second(s), 25 queries QQ

Powered by XMT Inc. © 2015-2025 ArrayV1.0 豫ICP备17022382号

系统运营:密城通 豫公网安备 41018302000212 号

快速回复 返回顶部 返回列表