По желанию, можно узнать не только город, но другие полезные данные.
API имеет ограничение на кол-во запросов, но при регистрации оно становится менее ощутимо, в любом случае, для небольших проектов возможности хватит более чем.
Создадим в расширениях UDT (тег пользователя) с названием get_user_city, для удобства заполним описание «Определение города пользователя», а далее сам код:
Code: Select all
// Sypex Geop API http://sypexgeo.net/ru/api/
// Базовая часть URL к API
$baseurl = "http://api.sypexgeo.net";
// Ключ API, который выдается после регистрации
$apiKey = "#####";
// Узнаем IP-адрес пользователя
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
// Делаем полное URL к API
$url = "$baseurl/$apiKey/json/$ip";
// Получаем данные с URL к API
$result = file_get_contents($url);
// Обрабатываем данные и сохраняем название города в отдельную переменную
$result = json_decode($result);
$userCity = $result->{'city'}->{'name_ru'};
// Создаем переменную Smarty и помещаем в нее название города
$smarty->assign('userCity', $userCity);
Code: Select all
{get_user_city}
{FormBuilder form='order' value_fld29=$userCity}