Выборка инфоблоков через IblockTable и привязки к сайтам в Bitrix D7
Зачем смотреть именно на IblockTable
Глобальный список инфоблоков хранится в b_iblock; в D7 к нему обращаются через \Bitrix\Iblock\IblockTable. Отдельная сущность \Bitrix\Iblock\IblockSiteTable описывает, на каких сайтах (SITE_ID) разрешён каждый инфоблок — одна строка на пару «инфоблок–сайт». Для выпадающих списков в своих модулях и отладочных скриптов это удобнее, чем тянуть CIBlock::GetList, если вы уже в ORM-стиле.
Перед вызовами подключите модуль: \Bitrix\Main\Loader::includeModule('iblock');
Минимальный обход без фильтра
Достаточно перечислить строки и посмотреть структуру — пригодится при поиске «левого» типа или пустых ЧПУ.
use Bitrix\Iblock\IblockTable;
use Bitrix\Main\Loader;
Loader::includeModule('iblock');
$registry = IblockTable::getList();
while ($iblockRow = $registry->fetch()) {
// ID, IBLOCK_TYPE_ID, NAME, ACTIVE, SORT, URL-шаблоны страниц и т.д.
// TIMESTAMP_X приходит как Bitrix\Main\Type\DateTime
}Сортировка «как в админке» и карта для select
Чтобы список читался предсказуемо, сортируют по типу, затем по сортировке, затем по убыванию ID (свежие сверху). Для каждого инфоблока отдельным запросом собирают привязанные сайты — для десятков записей это приемлемо; если инфоблоков сотни, имеет смысл один раз выгрузить IblockSiteTable с группировкой в PHP.
use Bitrix\Iblock\IblockSiteTable;
use Bitrix\Iblock\IblockTable;
use Bitrix\Main\Loader;
Loader::includeModule('iblock');
$optionsForSelect = [];
$listHandle = IblockTable::getList([
'order' => [
'IBLOCK_TYPE_ID' => 'ASC',
'SORT' => 'ASC',
'ID' => 'DESC',
],
]);
while ($iblockRow = $listHandle->fetch()) {
$siteQuery = IblockSiteTable::getList([
'filter' => ['=IBLOCK_ID' => (int) $iblockRow['ID']],
'select' => ['SITE_ID'],
]);
$siteLabels = [];
while ($siteRow = $siteQuery->fetch()) {
$siteLabels[] = $siteRow['SITE_ID'];
}
$hint = sprintf(
'[%d, %s, %s] %s',
(int) $iblockRow['ID'],
$iblockRow['IBLOCK_TYPE_ID'],
implode(', ', $siteLabels) ?: '—',
$iblockRow['NAME']
);
$optionsForSelect[$iblockRow['ID']] = $hint;
}Ключом массива остаётся числовой ID — такой формат сразу кладут в select HTML или в параметры своего административного интерфейса.
На что смотреть в строке инфоблока
VERSION— один или два хранилища свойств; влияет на миграции и тяжесть некоторых запросов.RIGHTS_MODE— расширенные права по разделам или упрощённые; важно для диагностики «почему не видит инфоблок».- Шаблоны
LIST_PAGE_URL,DETAIL_PAGE_URL,SECTION_PAGE_URL— могут быть пустыми, если ЧПУ задаётся только на уровне компонента.
Итог
IblockTable::getList даёт полный перечень инфоблоков с нужным order; IblockSiteTable — привязку к сайтам. Комбинируя оба запроса, собирают человекочитаемые подписи для админских форм и быстро проверяют конфигурацию мультисайта без прямого SQL к b_iblock_site.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии