CIBlock — класс для работы с самими инфоблоками из кода:
их созданием, изменением настроек и удалением. Не путайте с
CIBlockElement, который работает с элементами внутри
инфоблока, — здесь речь о самом контейнере.
Получение списка инфоблоков
<?php
$result = CIBlock::GetList(
['SORT' => 'ASC'],
['TYPE' => 'catalog', 'ACTIVE' => 'Y']
);
while ($iblock = $result->Fetch()) {
echo $iblock['ID'] . ' — ' . $iblock['NAME'] . PHP_EOL;
}
Первый параметр — сортировка, второй — фильтр. Частые условия фильтра:
TYPE (код типа инфоблока), ACTIVE, SITE_ID
для многосайтовой конфигурации.
Получение одного инфоблока по ID
<?php
$iblock = CIBlock::GetArrayByID(5);
echo $iblock['NAME'];
echo $iblock['CODE'];
Метод возвращает массив с настройками инфоблока — включая символьный код, используемый в компонентах вместо числового идентификатора для более устойчивого к переносу между серверами кода.
Нужна помощь с Битрикс?
Создание инфоблока
<?php
$ib = new CIBlock;
$fields = [
'ACTIVE' => 'Y',
'NAME' => 'Портфолио',
'CODE' => 'portfolio',
'IBLOCK_TYPE_ID' => 'content',
'SITE_ID' => ['s1'],
'SORT' => 100,
'GROUP_ID' => ['2' => 'R'], // права доступа для группы
];
$id = $ib->Add($fields);
if ($id) {
echo 'Создан инфоблок с ID ' . $id;
} else {
echo 'Ошибка: ' . $ib->LAST_ERROR;
}
Обратите внимание на GROUP_ID — права доступа задаются сразу
при создании массивом вида «идентификатор группы» → «уровень доступа».
Без этого параметра инфоблок создастся без прав ни для кого, кроме
администратора, и не будет виден на публичной части.
Обновление настроек
<?php
$ib = new CIBlock;
$ib->Update(5, [
'NAME' => 'Портфолио проектов',
'SORT' => 50,
]);
Метод Update принимает только те поля, которые нужно изменить, —
остальные настройки инфоблока остаются прежними.
Удаление
<?php
CIBlock::Delete(5);
Удаление инфоблока удаляет и все его элементы, разделы и свойства — операция необратимая. Перед вызовом в production-коде разумно предусмотреть подтверждение и резервную копию, а не вызывать метод напрямую по условию.
Работа со свойствами инфоблока из кода
Сам класс CIBlock свойствами не занимается — для этого
используется отдельный класс CIBlockProperty. Здесь важно
различать уровни: CIBlock — настройки контейнера,
CIBlockProperty — список характеристик, доступных элементам,
а CIBlockElement — сами элементы с их конкретными значениями.
Практический пример: создание инфоблока при установке модуля
Частый сценарий — модуль или решение при первой установке проверяет, существует ли нужный инфоблок, и создаёт его, если нет:
<?php
$existing = CIBlock::GetList([], ['CODE' => 'reviews', 'TYPE' => 'content'])->Fetch();
if (!$existing) {
$ib = new CIBlock;
$id = $ib->Add([
'ACTIVE' => 'Y',
'NAME' => 'Отзывы',
'CODE' => 'reviews',
'IBLOCK_TYPE_ID' => 'content',
'SITE_ID' => ['s1'],
'GROUP_ID' => ['2' => 'R'],
]);
}
Проверка по символьному коду перед созданием избавляет от дублей при повторном запуске установочного скрипта.
Частые ошибки
- Не заданы права доступа при создании. Инфоблок не выводится на сайте, хотя создан без ошибок.
- Символьный код не задан или не уникален. Затрудняет обращение к инфоблоку из компонентов, где принято использовать код, а не числовой ID.
- Удаление без проверки условия. Из-за ошибки в логике можно удалить не тот инфоблок безвозвратно.
-
Путаница между
CIBlockиCIBlockElement. Первый работает с самим контейнером, второй — с содержимым внутри него.
Итог
CIBlock отвечает за сам инфоблок как сущность: создание,
изменение настроек, удаление и получение списка. Из четырёх основных
методов — GetList, GetArrayByID, Add,
Update, Delete — на практике важнее всего
не забывать про GROUP_ID при создании: без прав доступа
новый инфоблок останется невидимым для посетителей сайта.
