Полный цикл в digital

Работа с Geo средствами Bitrix

Очень часто бывает задача показывать пользователю различный контент в зависимости от того, из какого государства просматривает пользователь ваш сайт. Процесс определения государства конечно же должен быть автоматизирован.

Определение местоположения реализовано в классах пространства имён \Bitrix\Main\Service\GeoIp.

Для обработки местоположения пользователя может быть использовано несколько сервисов. Список доступных можно посмотреть в административном разделе сайта: Настройки -> Настройки продукта -> Геолокация.

По умолчанию, пользователю доступны 3 обработчика:

  1. MaxMind
  2. Sypex Geo
  3. GeoIP

Для MaxMind и Sypex Geo нужны ключи доступа к данным. При регистрации в сервисе Sypex Geo предоставляется 30000 бесплатных запросов в месяц, чего для многих сайтов достаточно.

Код страны можно вытащить из модуля "Веб-аналитика" через переменные окружения, подробней тут.

Как работает Geo

Получение объекта с данными о местоположении, на некоторых хостингах, может быть установлена только англоязычная база расширения geoip, поэтому если не работает, можно попробовать en вместо LANGUAGE_ID:

$geoIpData = \Bitrix\Main\Service\GeoIp\Manager::getDataResult($ip,LANGUAGE_ID);

Методы объекта

Проверить, было ли определение успешным:

$geoIpData->isSuccess();

Получение страны:

$geoIpData->getGeoData()->countryName;

Получение региона:

$geoIpData->getGeoData()->regionName;

Получение города:

$geoIpData->getGeoData()->cityName

Класс службы, с помощью которой было определено местоположение:

$geoIpData->getGeoData()->handlerClass;

Получение данных в одну строку

Определение IP-адреса пользователя:

$ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();

Код страны одной строкой:

$countryCode = \Bitrix\Main\Service\GeoIp\Manager::getCountryCode($ip,LANGUAGE_ID);

Название страны одной строкой:

$countryName = \Bitrix\Main\Service\GeoIp\Manager::getCountryName($ip,LANGUAGE_ID);

Название города одной строкой:

$cityName = \Bitrix\Main\Service\GeoIp\Manager::getCityName($ip,LANGUAGE_ID);

Почтовый индекс города одной строкой:

$postCode = \Bitrix\Main\Service\GeoIp\Manager::getCityPostCode($ip,LANGUAGE_ID);

Данные о геопозиции одной строкой:

$geoPosition = \Bitrix\Main\Service\GeoIp\Manager::getGeoPosition($ip,LANGUAGE_ID);

Широта одной строкой:

$lat = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLatitude($ip,LANGUAGE_ID));

Долгота одной строкой:

$lon = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLongitude($ip,LANGUAGE_ID));

Добавление нового сервиса

Данный список можно расширить своими обработчиками, которые прописываются с помощью обработчика события onMainGeoIpHandlersBuildList для модуля main:

$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler(
    'main',
    'onMainGeoIpHandlersBuildList',
    'GeoIpHandler'
);
function GeoIpHandler()
{
    return new \Bitrix\Main\EventResult(
        \Bitrix\Main\EventResult::SUCCESS,
        array(
            'YourClass' => '/path/to/your/class.php',
        )
    );
}

Обработчик должен обязательно содержать 3 метода: getTitle, getDescription, getData. Примеры обработчиков можно посмотреть в ядре, встроенные в ядро обработчики расположены тут:

'\Bitrix\Main\Service\GeoIp\MaxMind' => 'lib/service/geoip/maxmind.php',
'\Bitrix\Main\Service\GeoIp\Extension' => 'lib/service/geoip/extension.php',
'\Bitrix\Main\Service\GeoIp\SypexGeo' => 'lib/service/geoip/sypexgeo.php'
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг