Перейти к содержанию
Wanted

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

Рекомендуемые сообщения

Уважаемый 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/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поправил.При переходе по ссылке из вне, скидывал на домашнюю страницу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nepoluchaetsa postavit' dopolnenie. Pokazyvet oshibku: Parse error: syntax error, unexpected T_IF, expecting T_FUNCTION

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где именно вылазиет ошибка?Можно ее код полностью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно полный код файла system/library/class-ipgeo.php еще раз выложить а то только кусочек...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.5.5.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Версия 1.5.5.1.2 белый экран на фронтенде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.