昨天的分享中,波波為大家分享了通過IP定位到用戶的城市,今天我們換一種方法來實現,根據用戶城市不同,讓網站自動切換不同的城市。
關于這個問題其實實現起來不復雜,不過波波思考了幾天,原因在于上次分享內容用的是淘寶的api,而在淘寶的返回數據中城市只有漢字和citycode,所以使用起來尤其對于初學者極其不方便。所以我們這次使用高德地圖的api。
高德地圖API根據IP定位接口返回的數據中每個城市都有一個adcode,其實這個adcode是郵政編碼,所以實現的話,我們首先給網站后臺建立一個數據表,我們命名為citycode,表中需要至少兩個字段,一個是郵政編碼,一個是簡稱,比如"鄭州",在數據庫中存儲數據為"zz",當然了大家可以隨意定義,我這里只是為了講解方便。
第一步,獲取用戶的IP地址,教程請參考《如何通過IP地址定位用戶的位置》。
第二步,根據ip地址獲取用戶所在城市的郵政編碼。源碼如下:
/*高德地圖IP定位*/
function IP2Location($ip,$para){
//高德的IP定位返回數據較少,如需詳細定位信息可使用淘寶接口。
$str="output=json&ip=".$ip."&key=".$para;
$url="http://restapi.amap.com/v3/ip?".$str;
$content=file_get_contents($url);
$data=json_decode($content,true);
return $data;
}
需要說明的是函數IP2Location($ip,$para)中$para傳的是你在高德開放平臺申請的webService的key值。不是JSapi的那個接口哦,不然沒有數據不要說波波代碼有問題。
調用的時候只需要寫一句:$location=IP2Location($ip,$key);就可以了。
第三步,查詢數據庫實現跳轉。代碼如下:
$row=$mysql->query("select * from `citycode` where `adcode`='{$location['adcode']}'limit 1");
if($row){
$url="http://".$row['簡寫的字段名'].".域名";
//拼接出來的網址類似http://zz.58.com,這里僅僅是舉例,非特定58.請知悉
echo "<!--<script language='javascript' type='text/javascript'>";
echo "window.location.href='$url'";
echo "</script>-->";
}
通過上面的代碼已經實現了根據用戶IP地址自動切換網站城市的目的,但是如果僅僅這樣并不完善,對于一個大型網站來講代碼開發還應該具備糾錯功能。以上分享僅供交流學習。
多大型信息平臺,如58同城,百姓網等都會有全國地區分站,比如我廣州的,打開58同城會自動進入廣州分站。
現在很多做網站的站長和網站建設公司都會采用pageadmin這類網站系統來建站,pageadmin是支持站群的,下面演示如何實現58同城的地區跳轉功能。
1、首先需要一個iP識別接口,這里可以到阿里云去申請,我們也可以用淘寶的免費api接口,阿里云的接口返回信息格式如下。
{"code":0,"data":{"ip":"210.73.44.249","country":"中國","area":"","region":"廣東","city":"廣州","county":"XX","isp":"科技網","country_id":"CN","area_id":"","region_id":"440000","city_id":"440100","county_id":"xx","isp_id":"1000114"}}
下面我們通過ajax請求的方式來獲取到歸屬信息實現跳轉,代碼如下:
<script type="text/javascript"> var clientIp="@StringHelper.GetClientIP()";//調用pageadmin的內置方法獲取ip地址 var api="http://ip.taobao.com/service/getIpInfo.php"; $(function () { $.ajax({ url: api, type: "GET", dataType: "json", //指定服務器返回的數據類型 data: { ip: clientIp }, success: function (ipData) { ipData=JSON.parse(ipData); var city=ipData.data.city; cityDomain(city) //調用城市判斷函數 } }); }); //城市判斷函數 function cityDomain(city) { var domain="www.58.com"; //換成自己的域名 switch (city) { case "廣州": domain="guangzhou.58.com"; break; case "北京": domain="beijing.58.com"; break; case "其他地區一一判斷": //更多 break; } location.href="domain"; } </script>
域名跳轉這部分可以在pageadmin的后臺建一個分類表來實現,這樣就可以實現后臺控制,如下圖:
添加一個自定義字段domain,這樣就可以通過后臺來控制地區和域名的對應,以后如果有變動直接通過后臺修改即可,我這里添加了幾條演示數據,效果如下。
通過點擊添加和修改就可以實現地區和域名的后臺控制,相比直接在模板中寫死,是不是方便了很多。
者:Aaron
轉發鏈接:https://segmentfault.com/a/1190000022781346
*請認真填寫需求信息,我們會在24小時內與您取得聯系。