Многосайтовость в «Битриксе»

Делюсь опытом разработки многосайтов.

Подкаталоги в php_interface

«Битрикс» позволяет создавать для каждого сайта свой php_interface, со своим init.php и подключаемыми файлами. Что это даёт? Как известно, все файлы, подключаемые в init.php, подгружаются на каждом хите. Вынеся всю логику в каталог отдельного сайта, мы снимем необходимость прогружать эти файлы в других сайтах. Хороший тон — использовать эту возможность всегда, даже когда разрабатывается один сайт, потому что никто не гарантирует, что, скажем, через год на том же ядре не появятся новые проекты.

Из консоли идентификатор сайта не определяется и, как следствие, подкаталог не подгружается. Консольные скрипты можно выносить в корневой php_interface, но лучше всего — в модули.

В документации можно почитать о порядке выполнения страницы.

Шаблоны компонентов

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

  • не возникнет необходимости городить избыточное название шаблона компонента (напр., bitrix:news) для нового сайта (ага, один news уже был кастомизирован для первого сайта);
  • при редизайне сайта нужно просто создать новые шаблоны сайта и компонентов, не затирая старые, не городя названия в стиле «news_v2»;

Шаблоны компонентов, используемые в разных шаблонах сайтов можно размещать в /local/templates/.default/. Для удобства его принадлежность к конкретному проекту я выделяю приставкой в начале названия: (project.template_name).

Сортировка сайтов

Со многими, наверное, был такой случай: создал сайт в «Битриксе», зашёл на него, а показывается другой. Дебажишь константу SITE_ID, а в ней совсем не то. Проверяешь адреса, настройки — всё ОК. Но сайт не определяется. А дело-то всё в порядке сортировки сайтов — субдомены должны иметь индекс сортировки выше, чем основные сайты. И ещё нужно расставлять приоритет в зависимости от названия: у abs.site.ru выше, у qwe.site.ru — ниже. Прямо как в настройках «Апача».

«Адреса сайтов»

Частенько бывает нужно перелинковать сайты друг на друга, типичный пример: site.ru и job.site.ru. Создавать лишние константы — плохо, особенно, когда для этой задачи в «Битриксе» почти всё есть. В настройках сайта через админку можно указать УРЛ сервера и получить эти данные с помощью метода \Bitrix\Main\SiteTable::getList(). Вот только указанный метод обращается напрямую к БД. Решить эту проблему можно с помощью модуля «Адреса сайтов», который хранит информацию в дисковом кеше и имеет удобное АПИ для работы с ней.

И ещё раз о php_interface

Лично меня, когда я был «маленьким битриксоидом», пугали модулями. Мол, там всё непросто, и лучше с ними не связываться. Действительно, там есть свои особенности, если делается решение для «Маркетплейса». Но фактически, модуль — тот же самый компонент, только круче и интереснее.

Модуль быстро собирается, особенно, если делать это из заготовленных шаблонов. В модуле поддерживается автозагрузка классов, есть опции (редактируются через админку) и всё то же самое, что и в каталоге php_interface. Только структурированное.

Есть мнение, что создание модуля должно быть оправдано. Я считаю иначе: должно быть оправдано использование php_interface.

Поделиться
Отправить
Популярное