Блог Горошко Андрея 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, условия в шаблоне, разные инфоблоки, настройки сайта.

Мой рейтинг:

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

Related Post

Создание и управление Агентами в Битрикс для фоновых задачСоздание и управление Агентами в Битрикс для фоновых задач

Средний рейтинг Еще нет оценок Агенты в 1С-Битрикс — это механизм для выполнения PHP-функций по расписанию. Они идеально подходят для задач, которые не должны выполняться во время загрузки страницы пользователем:

Всплывающие окна в Битрикс: Создание и управление с помощью BX.PopupWindowВсплывающие окна в Битрикс: Создание и управление с помощью BX.PopupWindow

Средний рейтинг Еще нет оценок Всплывающие (модальные) окна — неотъемлемая часть современного интерфейса. Битрикс предоставляет мощный и гибкий JS-класс BX.PopupWindow для их создания и управления. Шаг 1: Базовое создание окна Для создания

Создание своего модуля в Битрикс: Структура, install/index.php и version.phpСоздание своего модуля в Битрикс: Структура, install/index.php и version.php

Средний рейтинг Еще нет оценок Модуль — это основной способ расширения функциональности Битрикс. Создание собственного модуля позволяет инкапсулировать бизнес-логику, компоненты, классы и административные страницы в единый, легко устанавливаемый пакет. Шаг