Yandex Metrika
sanches.free 19 просмотров

GeoIP в ядре: Manager, провайдеры и быстрые геттеры

Источники данных

Сервисы геолокации подключаются обработчиком onMainGeoIpHandlersBuildList; список активных провайдеров виден в админке на странице «Настройки продукта → Геолокация». У SypexGeo и платных баз бывают лимиты или требование ключа — это настраивается там же.

IP пользователя и полный объект

use Bitrix\Main\Service\GeoIp\Manager;

$ip = Manager::getRealIp();
$result = Manager::getDataResult($ip, LANGUAGE_ID);

На части хостингов русскоязычная база отсутствует — пробуйте вторым аргументом 'en' и смотрите, заполняются ли строки локализации.

Проверка успеха и поля

if ($result->isSuccess()) {
    $data = $result->getGeoData();
    $city = $data->cityName;
    $country = $data->countryName;
}

Быстрые методы

$code = Manager::getCountryCode($ip, LANGUAGE_ID);
$name = Manager::getCountryName($ip, LANGUAGE_ID);
$city = Manager::getCityName($ip, LANGUAGE_ID);
$zip = Manager::getCityPostCode($ip, LANGUAGE_ID);
$pos = Manager::getGeoPosition($ip, LANGUAGE_ID);
$lat = Manager::getGeoPositionLatitude($ip, LANGUAGE_ID);
$lon = Manager::getGeoPositionLongitude($ip, LANGUAGE_ID);
$tz = Manager::getTimezoneName($ip, LANGUAGE_ID);

Кто ответил

Поле handlerClass в getGeoData() показывает, какой обработчик реально дал результат — удобно для отладки порядка провайдеров.

Списки регионов

В исходных материалах приводился длинный CSV кодов регионов — в проектах его обычно не инлайнят в PHP: либо доверяют данным геопровайдера, либо хранят справочник отдельно.

Итог

Manager даёт как полноценный Result, так и компактные геттеры для типовых сценариев в шаблоне или при инициализации корзины/склада по местоположению.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии