Настройка отображения контента по региону 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка отображения контента по региону 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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С-Битрикс

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

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

Самый востребованный сценарий в 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 расчёт доставки работает автоматически.