Модуль «IpGeoBase. Определение местоположения по IP-адресу» для 1C-Битрикс
Написал модуль для определения местоположения пользователя по ip-адресу с 1С-Битрикс. Главной задачей — было не запрашивать информацию у сторонних сервисов, а работать с локальной базой адресов. Благо, тот же ipgeobase.ru её предоставляет бесплатно.
При установке модуля скачиваются актуальные базы. Если вдруг сервер ipgeobase будет недоступен, то будут установлены базы от 03.03.2015 (на момент написания это были самые свежие).
В текущей версии модуль расчитан на разработчиков (возможно в следующих версих модуль будет расширен. Если есть идеи как — предлагайте в комментариях). В поставке есть PHP-класс, который работает с локальной базой адресов. Метод getRecord($ip) возвращает информацию о найденном местоположении.
Пример:
use \Bitrix\Main\Loader; use \Olegpro\IpGeoBase\IpGeoBase; if(Loader::includeModule('olegpro.ipgeobase')) { echo '<pre>';print_r(IpGeoBase::getInstance()->getRecord($_SERVER['REMOTE_ADDR']));echo '</pre>'; }
Выведет:
Array ( [range] => 78.36.192.0 - 78.36.223.255 [cc] => RU [city] => Калининград [region] => Калининградская область [district] => Северо-Западный федеральный округ [lat] => 54.711594 [lng] => 20.509972 )
Работает довольно шустро. Пример выше отрабатывает за 0.001734.03 секунды. Для ещё большей скорости файл базы можно засунуть в RAM-память. Так же можно кешировать результаты самих запросов, например на 1 час.
В рамках хита запросы кешируются на уровне класса.
За основу поиска по базе адресов взят репозиторий: https://github.com/rossvs/ipgeobase.php
Установить модуль «IpGeoBase. Определение местоположения по IP-адресу» можно через Маркетплейс Битрикс
7 комментариев
Ну я попробую и отпишусь о результатах
Подскажите, пожалуйста, как потом вставить эти данные на страницу оформления заказа, компонент sale.order.ajax?
В теории, в result_modifier.php и одним из обработчиков https://dev.1c-bitrix.ru/api_help/sale/events/events_components.php можно сравнивать город пользователя со списком городов в интернет-магазине и делать его выбранным.
здраствуйте постоянно выходит окошко для подверждения "'это ваш город?" =>да, =>нет. как можно записать в сессию если пользователь нажал 'да'?
Модуль «IpGeoBase. Определение местоположения по IP-адресу» никаких окошек не выводит.
Привет, Олег
При установке решения получаю ошибку Произошла ошибка при установке решения olegpro.ipgeobase Ошибка при заспаковке архива /home/bitrix/ext_www/blahblah.com/bitrix/tmp/geo_files.zip: Array
Не подскажешь, что может быть не так? unzip установлен
Роман, попробуй подебажить.
(у меня под рукой нет сборки, чтобы посмотреть)