Налаштування автовизначення міста користувача 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування автовизначення міста користувача 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування автовизначення міста користувача 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, 'uk');

Зберігання вибраного міста в сесії

Визначене (або вибране вручну) місто зберігаєте в сесії:

// Запис
$_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=uk_UA";
$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 год