Регистрация
Вход через соцсети
Восстановление пароля

Определение города по IP   Партнерский модуль

бесплатно
Скачать
promo
Распространенная задача для крупных сайтов - автоматически определить город пользователя (название и ID города в NetCat) и использовать эти данные при работе сайта (например, показывать новости и товары только для "своего" города).
Для решения этой задачи мы адаптировали под NetCat код определения городов с поомщью ipgeobase.
Во вложении - файл welpis_getcitybyip.inc, содержимое которого (функцию welpis_getcitybyip()) нужно поместить внутрь файла /netcat/modules/default/function.inc.php
Использовать функцию можно следующим образом. Открываем главный макет дизайна Вашего сайта, и в системные настройки макета вносите дополнения:
Код:

$geoinfo=welpis_getcitybyip();
$geocity=$geoinfo['city']; // определили название города
$geocitycode=intval($geoinfo['citycode']); // определили ID города
if(isset($_GET[setcity]))
{ // Если принудительно поставили город, то перезаписываем куку
$newcity=$db->get_var("select Region_Name from Classificator_Region where Region_ID='".abs(intval($setcity))."' limit 1");
if($newcity)
{
$city_enc = base64_encode($newcity);
setcookie("geolocation", $city_enc, time()+3600*24*365); //set cookie for 1 year
setcookie("geolocationcode", intval($setcity), time()+3600*24*365); //set cookie for 1 year
}
header('location: '.$_SERVER['HTTP_REFERER']); // возвращаемся на ту страницу, откуда запросили смену города
}

Этот код позволит пользователю менять город, даже если он определился автоматически.

А вот фрагмент макета дизайна с селектором городов:
<p>Ваш город:</p> <select onchange=\"location='?setcity='+this.value;\">
".listQuery("SELECT Region_ID, Region_Name FROM Classificator_Region order by Region_Name",
"<option value=\$data[Region_ID]\".
(\$data['Region_ID']=='$geocitycode' ?
' selected':'').\">\$data[Region_Name]")."
</select>

Дальше уже можно использовать повсеместно переменную $geocitycode (в компонентах: $GLOBALS['geocitycode'] ) - именно в ней будет храниться ID города в базе Netcat.

Требования к серверу, где будет выполняться эта задача:
1. Должен быть установлен php-модуль simplexml
2. Должна быть установлена поддержка CURL.
бесплатно

Комментарии 11

Гость 04 апреля 2013, 16:29:48
А где находятся эти самые "системные настройки макета"?
Открываете макет дизайна, в нем вверху есть поле "Шаблоны вывода навигации". Извините за неверную терминологию. :)
Гость 29 июля 2013, 19:49:39
данный модуль будет работать на joomla 1.5?
Да, будет и на джумле работать, но нужно будет поменять SQL-запрос по выборке города из базы на другой (на какой именно - не знаю, с джумлой не работал). А в остальном код не привязан к конкретной CMS.
Гость 29 июля 2013, 22:09:06
а можно немного подробнее описать как вставить этот модуль на сайт. вот тут не ясно Во вложении - файл welpis_getcitybyip.inc, содержимое которого (функцию welpis_getcitybyip()) нужно поместить внутрь файла /netcat/modules/default/function.inc.php. заранее извиняюсь за тупость
Если говорить об установке на Joomla, то здесь Вам лучше посоветоваться именно со специалистом по Joomla. К сожалению, у меня нет опыта работы с этой системой. Вам нужно выяснить, в какой файл можно вставить свои функции, и туда поместить опубликованный мною код функции. Затем, видимо, в макет дизайна или в другое место, которое выполняется при каждом запуске сайта, уже поставить команду, вызывающую вышедобавленную функцию.
А если говорить о неткат, то берете этот файл welpis_getcitybyip.inc, открываете на редактирование в любом текстовом редакторе (например, в блокноте), выделяете весь код, вставляете его (опять же с помощью текстового редактора) в файл /netcat/modules/default/function.inc.php, но соблюдая при этом правила написания PHP-кода (т.е. скорее всего вставить код надо будет не прямо в конец, а до "?>".
В случае, если у Вас нет опыта PHP-программирования, желательно соблюдать осторожность, т.к. если допустить ошибку в function.inc.php, сайт перестанет работать, пока не устраните ошибку, отредактировав файл, например, по FTP или через файл-менеджер NetCat.
Если нужна помощь в установке этого модуля на NetCat - напишите мне на info@welpis.ru, решим задачку. Руслан
Гость 30 июля 2013, 11:16:48
то есть если я нарою в инете в какой файл надо вставлять код в джумле вы мне поможите?
Гость 30 июля 2013, 11:19:22
а код должен выглядеть:
<?php
$geoinfo=welpis_getcitybyip();

$geocity=$geoinfo['city']; // определили название города

$geocitycode=intval($geoinfo['citycode']); // определили ID города

if(isset($_GET[setcity]))

{ // Если принудительно поставили город, то перезаписываем куку

$newcity=$db->get_var("select Region_Name from Classificator_Region where Region_ID='".abs(intval($setcity))."' limit 1");

if($newcity)

{

$city_enc = base64_encode($newcity);

setcookie("geolocation", $city_enc, time()+3600*24*365); //set cookie for 1 year

setcookie("geolocationcode", intval($setcity), time()+3600*24*365); //set cookie for 1 year

}

header('location: '.$_SERVER['HTTP_REFERER']); // возвращаемся на ту страницу, откуда запросили смену города

}
?>
Гость 30 июля 2013, 11:29:58
Создаем папку templates/ваш_шаблон/geo/ и кладем туда API и базу.
Это лишь код, вызывающий мою функцию. Помимо вызывающего кода нужно где-то разместить еще и саму функцию (welpis_getcitybyip).
Базы, кстати, нет - данные запрашиваются не из базы, а со специального geoip-сервиса.
Нет, по джумле, к сожалению, не помогу. Лучше обратитесь к специалистам именно по этой системе, т.к. я слишком долго буду разбираться, почему не работает, не устанавливается и т.д. Могу помочь только с NetCat.
оставить комментарий
Описание проекта