Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Доработка] GeoIP для выбора языка по умолчанию


Wanted

Recommended Posts

Уважаемый All,Сделал для своего проекта доработку для определения страны посетителя и выбора языка для него,например если клиент пришел с русских IP То для него выбирается Русский язык.Если все остальные - то по умолчанию Английский.Если наберет большую популярность - могу создать отдельным инсталляционным модулем для openCart.Если кому нужно просто куски кода - пишите - выложу.

Надіслати
Поділитися на інших сайтах


Любые доработки можно выкладывать на сайте, даже спрашивать не нужно. Будем благодарны.

Надіслати
Поділитися на інших сайтах


Ну тогда по порядку:

1. Открываем файл catalog/controller/common/header.php, и добавляем текст,

сразу после

class ControllerCommonHeader extends Controller {

protected function index() {

if (!isset($this->session->data['language_change'])) { $this->session->data['language_change'] = '0'; }	//print $this->session->data['language_change'];	//print $this->data['language_change'];		if ($this->session->data['language_change']=='0') 			{			 $ipList = new IPGeo;			 $text_client_ip = $ipList->getRealIpAddr();			 $this->data['text_geoip_country']=$ipList->get_user_country($text_client_ip); //Здесь можно подставить любой другой IP "XX.XX.XX.XX" Для теста			$this->session->data['language_change']='1';			if ($this->data['text_geoip_country']=='RU') //Здесь проверка на регион, список регионов берем на сайте http://www.wipmania.com/ru/				{ 				  $_SESSION['language'] = 'ru'; 				  $this->session->data['language']='ru';				  $this->session->data['language_code']='ru';				} else { 				  $_SESSION['language'] = 'en'; 				  $this->session->data['language']='en';				  $this->session->data['language_code']='en';				}					$this->redirect($_SERVER['REQUEST_URI']);				}			}
2. Создаем файл system/library/class-ipgeo.php, и кладем в него следующий код:

<?phpclass IPGeo {	function get_user_country($ip)	{//Возвращает двухбуквенный код страны посетителя		$site_name = "www.overtune.ru";		$x=file_get_contents('http://api.wipmania.com/'.$ip.'?'.$site_name);		return $x;	}	function getRealIpAddr()	{//Возвращает реальный IP клиента	    if ( getenv ('REMOTE_ADDR')) {$user_ip = getenv ('REMOTE_ADDR');}	    elseif ( getenv ('HTTP_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_FORWARDED_FOR');} 	    elseif ( getenv ('HTTP_X_FORWARDED_FOR')) {$user_ip = getenv ('HTTP_X_FORWARDED_FOR');} 	    elseif ( getenv ('HTTP_X_COMING_FROM')) {$user_ip = getenv ('HTTP_X_COMING_FROM');} 	    elseif ( getenv ('HTTP_VIA')) {$user_ip = getenv ('HTTP_VIA');} 	    elseif ( getenv ('HTTP_XROXY_CONNECTION')) {$user_ip = getenv ('HTTP_XROXY_CONNECTION');} 	    elseif ( getenv ('HTTP_CLIENT_IP')) {$user_ip = getenv ('HTTP_CLIENT_IP');} 	    else {$user_ip='unknown';}	    if (15 < strlen ($user_ip)){	        $ar = split (', ', $user_ip);	        for ($i= sizeof ($ar)-1; $i> 0; $i--){	            if ($ar[$i]!='' and !preg_match ('/[a-zA-Zа-яА-Я]/', $ar[$i])){	                $user_ip = $ar[$i]; 	                break; 	                }	            if ($i== sizeof ($ar)-1){$user_ip = 'unknown';}	         }	        }	    if ( preg_match ('/[a-zA-Zа-яА-Я]/', $user_ip)){$user_ip = 'unknown';}	    return $user_ip;	}}?>
3. Открываем файл system/startup.php, и в самый его конец, перед ?> добавляем код:

require_once(DIR_SYSTEM . 'library/class-ipgeo.php');
4. Радуемся жизни, т.к. теперь если пользователь зайдет с иностранного (не Российского) IP, То сайт у него будет на английском по умолчанию, для все Российских IP сайт будет по русски.

Причем при переключении руками языка на сайте, уже ничего не меняется, а остается выбранный язык.

P.S. Данные берутся онлайн с сайта http://www.wipmania.com/

Надіслати
Поділитися на інших сайтах


  • 3 weeks later...
  • 2 weeks later...
  • 1 year later...
  • 1 year later...

Nepoluchaetsa postavit' dopolnenie. Pokazyvet oshibku:

Parse error: syntax error, unexpected T_IF, expecting T_FUNCTION

 

Лишняя последняя скобка

 

и еще можно добавить в начало

 

if(empty($this->session->data['language_change']))

    $this->session->data['language_change']='0';

Надіслати
Поділитися на інших сайтах


  • 1 year later...
  • 4 weeks later...
  • 1 year later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.