Блог Горошко Андрея 1C-Битрикс Многосайтовость в Битрикс: Как разделить контент и шаблоны

Многосайтовость в Битрикс: Как разделить контент и шаблоны

Многосайтовость — одна из ключевых «фишек» Битрикс.

Она позволяет управлять неограниченным количеством сайтов (с разными доменами, шаблонами и контентом) из одной административной панели на базе одной лицензии.

Как это работает?

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

  • SITE_ID: Уникальный идентификатор сайта (например, s1, s2, en).
  • SITE_TEMPLATE_PATH: Путь к шаблону текущего сайта (например, /local/templates/main_template/).

Именно эти константы являются ключом к разделению логики и представления.


1. Разделение шаблонов (представления)

Это самый простой и очевидный уровень разделения.

Способ А: Разные шаблоны для разных сайтов

  1. Создайте разные шаблоны: В папке /local/templates/ создайте папки для каждого сайта (например, site_s1, site_s2).
  2. Назначьте шаблоны сайтам: В административной панели (Настройки -> Настройки продукта -> Сайты -> Список сайтов) для каждого сайта на вкладке «Шаблоны» укажите свой дизайн.

Способ Б: Условная логика в одном общем шаблоне

Иногда сайты очень похожи, и создавать два разных шаблона нецелесообразно. В этом случае можно использовать SITE_ID прямо в header.php или footer.php общего шаблона.

// /local/templates/common_template/header.php

//  Показываем разный логотип для разных сайтов
if (SITE_ID === 's1') {
    $logoPath = '/images/logo_s1.png';
} else {
    $logoPath = '/images/logo_s2.png';
}
?>
<a href="/"><img src="<?= $logoPath ?>" alt="Логотип"></a>

<?
//  Подключаем разные файлы стилей
if (file_exists($_SERVER['DOCUMENT_ROOT'] . SITE_TEMPLATE_PATH . '/css/' . SITE_ID . '.css')) {
    $APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . '/css/' . SITE_ID . '.css');
}

2. Разделение контента (логики)

Способ А: Разные инфоблоки

Это самый правильный и масштабируемый подход. Для каждого сайта создаются свои инфоблоки (новости, каталог и т.д.).

В настройках компонента на странице вы просто указываете нужный IBLOCK_ID.

  • На сайте s1 компонент news.list работает с инфоблоком ID=5 («Новости сайта 1»).
  • На сайте s2 тот же компонент news.list работает с инфоблоком ID=6 («Новости сайта 2»).

Способ Б: Один инфоблок на несколько сайтов

Иногда нужно, чтобы контент был общим, но частично отличался. Для этого используется свойство типа «Привязка к сайту» (LID).

  1. В настройках инфоблока создайте свойство (например, с кодом SITE_BINDING) типа «Привязка к сайту».
  2. В каждом элементе указывайте, на каких сайтах он должен отображаться.
  3. В фильтре компонента GetList добавьте условие по этому свойству.
// В component.php компонента новостей
$arFilter = [
    "IBLOCK_ID" => $arParams["IBLOCK_ID"],
    "ACTIVE" => "Y",
    "PROPERTY_SITE_BINDING" => SITE_ID //  Фильтруем по текущему сайту
];

3. Разделение кастомной логики (init.php)

Для каждого сайта можно создать свой файл init.php, который будет выполняться только для него.

  • /local/php_interface/s1/init.php — выполнится только для сайта s1.
  • /local/php_interface/s2/init.php — выполнится только для сайта s2.
  • /local/php_interface/init.php — выполнится для всех сайтов.

Это позволяет регистрировать разные обработчики событий или определять разные константы для каждого сайта.

Пример: Разные настройки для почтовых событий.

//  /local/php_interface/s1/init.php
// Для сайта s1 отправляем копии на один email
AddEventHandler("main", "OnBeforeEventSend", "addCopyToEmail_s1");
function addCopyToEmail_s1(&$arFields, &$arTemplate) {
    $arFields['BCC'] = 's1_archive@mycompany.com';
}

//  /local/php_interface/s2/init.php
// Для сайта s2 — на другой
AddEventHandler("main", "OnBeforeEventSend", "addCopyToEmail_s2");
function addCopyToEmail_s2(&$arFields, &$arTemplate) {
    $arFields['BCC'] = 's2_archive@mycompany.com';
}

Заключение

Многосайтовость в Битрикс — это мощный инструмент, основанный на простом принципе разделения по SITE_ID.

Правильно используя эту константу в настройках компонентов, фильтрах GetList и условной логике в шаблонах и init.php, вы можете построить гибкую и легко управляемую систему из множества сайтов на едином ядре.

многосайтовость Битрикс, несколько сайтов, SITE_ID, SITE_TEMPLATE_PATH, условия в шаблоне, разные инфоблоки, настройки сайта.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Создание дилерского портала с поддержкой холдинговой структуры и субдилерской сетиСоздание дилерского портала с поддержкой холдинговой структуры и субдилерской сети

Разработка и внедрение профессионального B2B-портала и дилерского кабинета на 1С-Битрикс позволяет кардинально сократить издержки отдела оптовых продаж, перевести дилеров на самообслуживание 24/7 и исключить ошибки ручного ввода заказов. Услуга «Создание

Получить поля коэффициента единицы измерения catalog.ratio.getFieldsПолучить поля коэффициента единицы измерения catalog.ratio.getFields

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Получить поля коэффициента единицы измерения catalog.ratio.getFields». Вы узнаете экспертные методики работы с catalog.ratio.getFields

Верстка страницы «Портфолио проектов» с фильтрами по отраслям и модальными кейсамиВерстка страницы «Портфолио проектов» с фильтрами по отраслям и модальными кейсами

Профессиональный frontend-инжиниринг и адаптивная верстка макетов под 1С-Битрикс являются ключевыми факторами высокой конверсии и удержания покупателей. Услуга «Верстка страницы «Портфолио проектов» с фильтрами по отраслям и модальными кейсами» обеспечивает стильная