Налаштування відображення контенту по регіону 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С-Бітрікс

Коли геолокація визначила регіон користувача, потрібно на його основі змінювати контент: ціни, телефони, баннери, умови доставки, асортимент. У Бітриксі нема єдиного механізму «регіональний контент» — це набір паттернів, кожен з яких застосовується для свого типу даних.

Регіональні ціни через типи цін каталогу

Найбільш затребуваний сценарій у e-commerce. Модуль catalog підтримує кілька типів цін (b_catalog_price_type): «Роздріб Москва», «Роздріб Регіони», «Оптова» тощо. Кожен тип ціни прив'язується до груп користувачів.

Логіка: користувач з Москви → група msk_users → тип ціни retail_msk. При визначенні регіону через IP або вибір міста додаєте користувача в потрібну групу (CUser::SetUserGroup() або через сесію) або встановлюєте тип ціни безпосередньо:

// В init.php або компоненті після визначення регіону
$regionPriceType = getRegionPriceType($_SESSION['USER_REGION']['city']);
define('REGION_PRICE_TYPE', $regionPriceType);

У компоненті каталогу передаєте PRICE_ID = REGION_PRICE_TYPE — компоненти bitrix:catalog.element та bitrix:catalog.section використовують цей параметр для вибірки потрібної ціни з b_catalog_price.

Регіональний текстовий контент

Телефони, адреси, умови доставки — найчастіше змінюються по регіону. Два підходи:

Інфоблок «Регіони» з прив'язкою контенту до кожного регіону. Властивості: CITY_CODE, PHONE, OFFICE_ADDRESS, DELIVERY_DESCRIPTION. У шаблоні запрашуєте елемент з фільтром по коду регіону:

$regionData = CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => REGIONS_IBLOCK_ID, 'PROPERTY_CITY_CODE' => $_SESSION['USER_REGION']['city_code']],
    false,
    ['nTopCount' => 1]
);

Параметри сайту (b_option) з суфіксом регіону: phone_msk, phone_spb. Простіше для невеликої кількості регіонів, незручно при масштабуванні.

Для регіонального контенту на сторінках використовуйте умовні блоки в шаблоні — перевіряєте $_SESSION['USER_REGION']['city_code'] та виводите відповідний блок. Для кешованих компонентів це проблема: кеш повинен бути різним для різних регіонів.

Кеширування та регіони: критичний момент

Кеш компонента у Бітриксі ключується за параметрами компонента та URL. При регіональному контенті кеш повинен бути різним для різних регіонів, інакше перший користувач з Москви «закешує» московський контент для всіх.

Рішення: додайте регіон у ключ кешу через CACHE_ADDITIONAL_ID:

$APPLICATION->IncludeComponent('bitrix:news.list', '.default', [
    'CACHE_TYPE' => 'A',
    'CACHE_TIME' => 3600,
    'CACHE_ADDITIONAL_ID' => $_SESSION['USER_REGION']['city_code'] ?? 'default',
    // ...
]);

Або вимкніть кеш для регіональних блоків (CACHE_TYPE = 'N') — тільки для тих компонентів, де контент реально змінюється по регіону. Кеш решти контенту не чіпайте.

Регіональні баннери та акції

Баннери та промо-блоки з регіональною прив'язкою — через інфоблок з властивістю REGIONS (тип «Прив'язка до інфоблока» або список). У компоненті фільтруєте за поточним регіоном:

$filter = [
    'IBLOCK_ID' => BANNERS_IBLOCK_ID,
    'ACTIVE' => 'Y',
    [
        'LOGIC' => 'OR',
        'PROPERTY_REGIONS' => $_SESSION['USER_REGION']['city_code'],
        'PROPERTY_REGIONS' => 'all', // Баннери для всіх регіонів
    ]
];

Для баннерів обов'язково ключуйте кеш за регіоном — інакше московський баннер побачать користувачі з Новосибірська.

Регіональна доставка

Умови доставки по регіонам управляються в модулі sale через служби доставки (b_sale_delivery_service) та їх зони. Вартість доставки розраховується на основі LOCATION_CODE з b_sale_location. При правильно налаштованому визначенні регіону та прив'язці до b_sale_location розрахунок доставки працює автоматично.