Список сайтов в 1С‑Битрикс: CSite::GetList и выборка в D7
Зачем это нужно
В одной копии ядра может быть несколько сайтов (мультисайт): отдельные домены, языковые версии или витрины. Для агентов, миграций и служебных скриптов часто требуется перебрать их программно — не вручную из админки.
Классический API: CSite::GetList
Метод возвращает объект CDBResult; в цикле Fetch() отдаются ассоциативные массивы с полями записи сайта (включая LID, SORT, имена доменов и настройки). Параметры сортировки и фильтра — те же паттерны, что у многих «старых» классов каталогов Битрикс.
$sortField = 'sort';
$sortDir = 'desc';
$siteFilter = [];
// Оставить только один сайт по символьному идентификатору:
// $siteFilter['LID'] = 's1';
$dbSites = CSite::GetList($sortField, $sortDir, $siteFilter);
while ($row = $dbSites->Fetch()) {
echo htmlspecialchars($row['LID']) . PHP_EOL;
// При необходимости: print_r($row);
}Если нужен конкретный сайт по коду — достаточно фильтра LID. Без фильтра перечисляются все доступные конфигурации, что удобно для сверки списков после копирования проекта или смены окружения.
D7: одна строка через ORM
В новых модулях предпочтительнее использовать слой данных ядра. Таблица сайтов описана классом SiteTable:
use Bitrix\Main\SiteTable;
$q = SiteTable::getList([
'select' => ['LID', 'NAME', 'DEF', 'SORT'],
'filter' => ['=ACTIVE' => 'Y'],
'order' => ['SORT' => 'DESC'],
]);
while ($site = $q->fetch()) {
echo '[' . htmlspecialchars($site['LID']) . '] ' . htmlspecialchars($site['NAME']) . PHP_EOL;
}Выбор колонок в select снижает нагрузку; для разовых отладочных дампов можно расширить список полей или убрать фильтр по активности — смотрите по задаче.
Практические замечания
- Символьные коды вида
s1,deзадаются в настройках сайта и участвуют в привязке почтовых шаблонов, агентов и константыSITE_IDв публичной части. - В CLI-скрипте не забудьте подключить пролог или загрузить нужные модули — иначе классы недоступны.
- На продакшене не выводите полный дамп записей без необходимости: в строке могут оказаться данные доменных имён и путей, достаточных для реконструкции структуры проекта.
Итого: для быстрой совместимости со старым кодом остаётся CSite::GetList; для нового функционала уместнее перейти на SiteTable с явным составом полей.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии