Налаштування відображення контенту по регіону 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 розрахунок доставки працює автоматично.







