Получаем город и регион из IP

Создадим сниппет с именем "getCity" и поместим в него код

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'http://ipgeobase.ru:7020/geo?ip='.$ip;
$xmlstr = file_get_contents($url);
$xml = new SimpleXMLElement($xmlstr);
$inetnum = $xml->ip[0]->inetnum;
$country = $xml->ip[0]->country;
$region = $xml->ip[0]->region;
$city = $xml->ip[0]->city;
$district = $xml->ip[0]->district;
$lat = $xml->ip[0]->lat;
$lng = $xml->ip[0]->lng;

if(empty($city)) {
$region = '';
$district='';
$lat=$lng='';
$city = 'Неизвестно';
} else {
$region = iconv('utf-8', 'utf-8', $region);
$city = iconv('utf-8', 'utf-8', $city);
}
$output = $modx->setPlaceholder('inetnum',$inetnum);
$output = $modx->setPlaceholder('country',$country);
$output = $modx->setPlaceholder('region',$region);
$output = $modx->setPlaceholder('district',$district);
$output = $modx->setPlaceholder('lat',$lat);
$output = $modx->setPlaceholder('lng',$lng);
$output = $modx->setPlaceholder('city',$city);
return $output;

Вызываем сниппет в любом месте

[[!getCity]]

А в месте где нужно вывести сам город соответственно вызываем плэйсхолдер:

[[+city]]

и если раскомментировать регион, то:

[[+inetnum]] - Диапазон IP адресов
[[+country]] - Страна
[[+region]] - Регион
[[+district]] - Район
[[+lat]], [[+lng]] - Координаты
[[+city]] - Город