Настройка автоопределения города пользователя 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка автоопределения города пользователя 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка автоопределения города пользователя 1С-Битрикс

Автоопределение города нужно, когда сайт работает в нескольких регионах: нужно подставить правильный город в шапке, показать актуальные цены и наличие, предложить ближайший магазин. В Битриксе это решается через встроенные механизмы геолокации или внешние геобазы.

Встроенный модуль геолокации Битрикса

Битрикс поставляется с модулем sale (интернет-магазин), который включает геолокацию. Настройки: Магазин → Настройки → Геолокация.

Модуль использует базу GeoIP (MaxMind GeoLite2 или платные версии). Файл базы подключается в настройках сайта. По IP пользователя определяются страна, регион, город.

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

$ip = \Bitrix\Main\Context::getCurrent()->getRequest()->getRemoteAddress();

// Встроенный определитель Битрикса
$location = \Bitrix\Sale\Location\GeoIp\Manager::getLocationByIp($ip, LANGUAGE_ID);
// $location['CITY_NAME']   — название города
// $location['REGION_NAME'] — название региона
// $location['COUNTRY_NAME'] — название страны

Если нужна только страна и город без привязки к модулю sale:

\Bitrix\Main\Loader::includeModule('sale');
$geo = \Bitrix\Sale\Location\GeoIp\Manager::getInfo($ip, 'ru');

Хранение выбранного города в сессии

Определённый (или выбранный вручную) город сохраняете в сессии:

// Запись
$_SESSION['USER_CITY'] = [
    'ID'   => $cityId,
    'NAME' => $cityName,
    'CODE' => $cityCode,
];

// Чтение в шаблоне
$currentCity = $_SESSION['USER_CITY'] ?? null;

Для авторизованных пользователей — дополнительно сохраняете в профиле пользователя через CUser::Update() с кастомным полем UF_CITY.

JavaScript-определение через браузер

Если пользователь разрешил доступ к геолокации — можно определить точнее через Geolocation API браузера, а затем преобразовать координаты в город (reverse geocoding):

navigator.geolocation.getCurrentPosition(async (pos) => {
    const resp = await fetch('/local/ajax/detect-city.php', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({
            lat: pos.coords.latitude,
            lng: pos.coords.longitude,
        }),
    });
    const data = await resp.json();
    if (data.city) showCityConfirmDialog(data.city);
});

Для reverse geocoding на стороне сервера используете API Яндекс.Геокодера или DaData:

// Яндекс Геокодер
$url = "https://geocode-maps.yandex.ru/1.x/?apikey={$key}&format=json"
     . "&geocode={$lng},{$lat}&kind=locality&results=1&lang=ru_RU";
$response = json_decode(file_get_contents($url), true);
$city = $response['response']['GeoObjectCollection']['featureMember'][0]
    ['GeoObject']['name'] ?? null;

Подтверждение города пользователем

Автоопределение — это предположение, не факт. Всегда показывайте всплывающую плашку «Ваш город — Минск?» с кнопками «Да, верно» / «Выбрать другой». Без подтверждения в некоторых сценариях (особенно с VPN) город будет определён неверно, и пользователь увидит неактуальные данные.

Плашку показываете на первом посещении через проверку $_SESSION['CITY_CONFIRMED']. После подтверждения или выбора — ставите флаг и больше не показываете.

Связь города с разделами каталога и ценами

Если у вас мультирегиональный сайт, город связывается с:

  • Сайтом Битрикса (multisite) — разные домены для разных городов
  • Разделами инфоблока — цены из свойств с региональными ценами
  • Ценовыми группами b_catalog_price_type — для каждого города своя группа цен
Этап Время
Настройка GeoIP-базы 1–2 ч
Логика определения и хранения города 3–4 ч
Браузерная геолокация + reverse geocoding 3–5 ч
UI-плашка подтверждения города 2–3 ч
Привязка к ценам / контенту 4–8 ч