Распространенная задача для крупных сайтов - автоматически определить город пользователя (название и 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, "/", $current_catalogue['Domain']); //set cookie for 1 year
setcookie("geolocationcode", intval($setcity), time()+3600*24*365, "/", $current_catalogue['Domain']); //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]</option>")?>
</select>
Дальше уже можно использовать повсеместно переменную $geocitycode (в компонентах: $GLOBALS['geocitycode'] ) - именно в ней будет храниться ID города в базе Netcat.
Требования к серверу, где будет выполняться эта задача:
1. Должен быть установлен php-модуль simplexml
2. Должна быть установлена поддержка CURL.
3. Netcat версии не ниже 5.х
Комментарии 11
А если говорить о неткат, то берете этот файл welpis_getcitybyip.inc, открываете на редактирование в любом текстовом редакторе (например, в блокноте), выделяете весь код, вставляете его (опять же с помощью текстового редактора) в файл /netcat/modules/default/function.inc.php, но соблюдая при этом правила написания PHP-кода (т.е. скорее всего вставить код надо будет не прямо в конец, а до "?>".
В случае, если у Вас нет опыта PHP-программирования, желательно соблюдать осторожность, т.к. если допустить ошибку в function.inc.php, сайт перестанет работать, пока не устраните ошибку, отредактировав файл, например, по FTP или через файл-менеджер NetCat.
Если нужна помощь в установке этого модуля на NetCat - напишите мне на info@welpis.ru, решим задачку. Руслан
<?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']); // возвращаемся на ту страницу, откуда запросили смену города
}
?>
Базы, кстати, нет - данные запрашиваются не из базы, а со специального geoip-сервиса.