我们基本上正在开发一个支持多种语言的Drupal 7站点。 用户应根据其IP重定向到区域翻译页面。
我尝试过使用以下模块,但它们没有帮助实现我想要的目标。
如何根据用户的身份将用户重定向到特定页面?
答案 0 :(得分:1)
我已添加了相同的模块...只需添加代码。只需很少的修改,就可以为任何语言和选项配置它。
ip2locationlite.class.php - >文件可以从此链接“http://ipinfodb.com/ip_location_api.php”下载。该文件由一个非常简单的类组成,仅用于调用http://ipinfodb.com/提供的web服务,可以通过使用自己的类与file_get_contents来避免。
我只用中文。
/ **作者:Sunny Jhunjhunwala(sunny.jhunjhunwala@sourcen.com) * @file - 该文件基本上使用ipinfodb提供的php api来获取用户的国家/地区 * /
/ ** *实现hook_init()。 *仅在第一次检查用户是否来自中国,如果是,则将用户重定向到中文版本的网站。 * / function dw_ip2location_init(){
if(!(array_key_exists('visited',$ _COOKIE))&& empty($ GLOBALS ['user'] - > uid)){
//设置cookie以检查用户是新用户还是现有用户。
setcookie(“visit”,1,time()+(10 * 365 * 24 * 60 * 60));
include_once('ip2locationlite.class.php');
$ ipLite = new ip2location_lite;
$ ipLite-> setkey的( 'a00740f71ae6ed8db250cb4c3a8ecdac672b5eae4d2a28c06284aa5461d0636d');
// @TODO:移动到生产时删除下面的if-else。
if(isset($ _ GET ['ip2location'])){
$ locations = $ ipLite-> getCountry($ _ GET ['ip2location']);
} else {
$ locations = $ ipLite-> getCountry($ _ SERVER ['REMOTE_ADDR']);
}
if(!empty($ locations)&& is_array($ locations)){
//检查用户是否来自中国并重定向。
if($ locations ['countryCode'] =='CN'|| $ locations ['countryName'] =='china'){
$ path = $ _GET ['q'];
$ translations = i18n_get_path_translations($ path);
$ language = i18n_language_interface();
if($ language-> prefix!='cn'){
global $ base_url;
if(!drupal_is_front_page()&& array_key_exists('zh-hans',$ translations)){
drupal_goto($ base_url。'/ cn /'。$ translations ['zh-hans'] ['href'],array('absolute'=> true));
}
其他{
drupal_goto($ base_url。'/ cn /',array('absolute'=> true));
}
}
}
}
}
}