老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
1,685

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

分类 网站技术/村民张先生 发布于 2017-05-05 03:18
0

按以下方法修改后,用户打开注册页面或资料修改页面时,如果含有地区选择项目,将自动根据用户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 .= '&nbsp;&nbsp;';
		}
	}

替换为(如果后台设置了自定义注册地址,请修改以下代码中的 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 .= '&nbsp;&nbsp;';
		}
	}
欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20171832.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截