«Адреса сайтов»
В многосайтовых разработках одного проекта на «Битриксе» периодически возникает необходимость в перелинковке сайтов. Типичные примеры: иноязычные версии сайта; подсайты проектов, дочерних компаний, размещаемые на других доменах. Простое решение — создать константы. Удобное решение — использовать данные из БД, хранящиеся в настройках сайтов. «Битрикс» умеет отдавать эти данные только после непосредственного обращения к БД. Понятное дело, такой расклад неприемлем.
Так были созданы «Адреса сайтов» — решение, облегчающее жизнь разработчиков. АПИ модуля умеет отдавать данные о всех сайтах системы, и, при необходимости, генерировать на каждом хите динамические константы. Информация забирается из файлового кеша, обращения к БД происходят только при добавлении нового или обновлении старых сайтов (ну и при устаревании кеша, разумеется).
В зоне Bitrix\Siteurl находится класс Sites, в котором доступны сл. методы:
getUrl();
getName();
getDomain();
getList();
У всех необязательный параметр $siteId по-умолчанию равен идентификатору текущего сайта. Метод getList() имеет второй параметр — $field, позволяющий ограничивать выборку.
use Bitrix\Siteurl;
Bitrix\Main\Loader::includeModule('nik.siteurl');
/**
* Вернёт массив всех сайтов со всеми полями:
* [s1] => array(NAME => Сайт 1, DOMAIN => site.ru, URL => http://site.ru)
* [s2] => array(NAME => Сайт 2, DOMAIN => eng.site.ru, URL => http://eng.site.ru)
* [s3] => …
*/
Sites::getList();
/**
* Вернёт массив всех сайтов и поле «Название веб-сайта»:
* [s1] => Сайт 1
* [s2] => Сайт 2
* [s3] => …
*/
Sites::getList(false, 'NAME');
/**
* Вернёт массив всех полей сайта с идентификатором s2:
* array(NAME => Сайт 2, DOMAIN => eng.site.ru, URL => http://eng.site.ru)
*/
Sites::getList('s2');
Если в настройках модуля активировать генерацию констант, оные будут создаваться на каждом хите. Данные берутся из кеша. Напр., если в системе заведено два сайта с идентификаторами s1 и it, нам будут доступны константы (всегда заглавными буквами):
S1_NAME
S1_DOMAIN
S1_URL
IT_NAME
IT_DOMAIN
IT_URL
Короче, жизнь теперь станет проще.