Yandex Metrika
sanches.free 1 просмотр

Список сайтов в 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 дней гарантии