Содержание
Платформа 1C-Битрикс содержит встроенные обработчики геолокации, позволяющие определить местоположение пользователя. Это особенно необходимо для мультирегиональных проектов, когда перед вами стоит задача показывать пользователю различный контент(каталог, контакты, цены, контент) в зависимости от региона.
Чтобы включить определение местоположения «Битрикс» через функционал платформы необходимо:
- Перейти на стартовую страницу сайта и после выбора режима правки открыть настройки компонента «Определение местоположения по IP-адресу»;
- Выбрать в категории «Выбор разработчика» и в поле «Обработчик» «Bitrix GeoIp (Sypex Geo)»;
- Сохранить изменения.
Чтобы задать настройки, необходимые для работы «Bitrix GeoIp», потребуется:
- Перейти в раздел: «Администрирование», далее выбрать «Настройки» и «Настройки продукта», а после «Геолокация»;
- Убедиться, что вы установили и активировали обработчик «Sypex Geo».
Когда компонент определения местоположения работает некорректно достаточно:
- Перейти по адресу: sypexgeo.net и зарегистрироваться.
- В персональном кабинете получить ключ, который вписывается в настройки «Sypex Geo» («Администрирование» - далее «Настройки», а после выбрать «Настройки продукта» и «Геолокацию», следующий шаг - «Sypex Geo» и «Дополнительно»).
Где найти обработчиков геолокации
Все доступные обработчики находятся в «Настройках». После перехода в «Настройки продукта» необходимо кликнуть «Геолокация». В списке доступных обработчиков:
- Sypex Geo;
- MaxMind;
- Расширение GeoIP.
Первые два нуждаются в ключах для получения доступа к необходимым сервисам. Чтобы тестировать с минимальными финансовыми расходами, рекомендуется пройти регистрацию на Sypex Geo, так как именно здесь предоставляется в месяц 30 000 бесплатных запросов. Найти ключ можно в личном кабинете. Он также указывается в настройках обработчика.
Обработчиками геолокации выступают классы-наследники GeoIpBase. В коробке идут три следующих обработчика:
buildInHandlers = array(
'BitrixMainServiceGeoIpMaxMind' => 'lib/service/geoip/maxmind.php',
'BitrixMainServiceGeoIpExtension' => 'lib/service/geoip/extension.php',
'BitrixMainServiceGeoIpSypexGeo' => 'lib/service/geoip/sypexgeo.php'
);
Свои добавляются при помощи события onMainGeoIpHandlersBuildList (модуль main):
eventManager = BitrixMainEventManager::getInstance();
eventManager->addEventHandler(
'main',
'onMainGeoIpHandlersBuildList',
'myGeoIpHandlers'
);
function myGeoIpHandlers()
<
return new BitrixMainEventResult(
BitrixMainEventResult::SUCCESS,
array(
'AcmeYourClass' => '/path/to/your/class.php',
)
);
>
IP-адрес пользователя определяется с помощью класса Bitrix Main Service Geoip Manager.
ip = \Bitrix\Main\Service\GeoIp\Manager::getRealIp();
Примеры обработчиков можно найти в ядре, обязательно требуется определить три метода: getTitle, getDescription и getData.
Применение на уровне API
Чтобы убедиться в стабильной работе модуля и разобраться, как его правильно использовать на уровне API, необходимо выполнить код на странице «Консоль PHP» в административной панели.
use BitrixMainLoader;
if (Loader::includeModule('intervolga.enrich')) <
result = IntervolgaEnrichProviderProxy::getIpInfo('88.87.88.238');
var_dump(result);
>
Особенности геолокации в модуле sale
Ранее о геолокации было сказано при обновлении модуля sale, а это значит, что геолокацию теперь можно использовать, чтобы определить местоположение пользователя с целью оформления заказа. Для этой задачи используется класс Bitrix Sale Location GeoIp. Он использует ранее описанный функционал, чтобы найти в базе Битрикса местоположение.
// Для возвращения ID местоположения
BitrixSaleLocationGeoIp::getLocationId(ip, lang);
// Для возвращения кода местоположения
BitrixSaleLocationGeoIp::getLocationCode(ip, lang);
// Для возвращения индекса
BitrixSaleLocationGeoIp::getZipCode(ip, lang);
Все эти методы предусматривают использование сохранения в cookies результата геолокации. Для нахождения местоположения в базе используется название независимо от регистра.