• МАКС: М.Базаров
  • Телеграм: М.Базаров
  • E-mail: mihail@bazarow.ru

Как создать инфоблок программно через D7 ORM?

Вопрос задан: 3 июня 2026 в 01:00 | Просмотров: 14 Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetClassCode, liveApiGetClassMethods, liveApiFindByNamespace, liveApiGetDocResource

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

Создание инфоблока через D7 ORM — важные ограничения

Важно: Согласно официальной документации 1С-Битрикс, «ORM не поддерживает полное создание инфоблока. Он добавляет базовую запись в таблицу b_iblock, но не привязывает инфоблок к сайту, не назначает права, не включает SEO-наследование и не гарантирует видимость в административном разделе».

Поэтому для корректного создания инфоблока с полноценной работой на сайте рекомендуется использовать классический API — метод CIBlock::Add. А D7 ORM применяется уже для последующей работы с элементами, разделами и свойствами.


Создание инфоблока через классическое API (рекомендуемый способ)

// 1. Подключаем модуль инфоблоков
\Bitrix\Main\Loader::includeModule('iblock');

// 2. Создаём инфоблок
$iblock = new \CIBlock;

$result = $iblock->Add([
    'IBLOCK_TYPE_ID' => 'mynews',          // тип инфоблока (должен существовать)
    'NAME'           => 'Новости моей компании',
    'CODE'           => 'mycompany_news',
    'API_CODE'       => 'News',            // обязательно для объектного ORM
    'ACTIVE'         => 'Y',
    'LID'            => ['s1'],            // привязка к сайту
    'SORT'           => 500,
    'GROUP_ID'       => [                  // права доступа
        2 => \CIBlockRights::PUBLIC_READ,  // Все пользователи — чтение
        8 => \CIBlockRights::PUBLIC_EDIT,  // Администраторы — полный доступ
    ],
    'LIST_PAGE_URL'     => '/news/',
    'DETAIL_PAGE_URL'   => '/news/#ELEMENT_CODE#/',
    'SECTION_PAGE_URL'  => '/news/#SECTION_CODE#/',
]);

if ($result) {
    echo 'Инфоблок создан, ID: ' . $result;
} else {
    throw new \Exception($iblock->getLastError()->getMessage());
}

Обязательные параметры:

  • IBLOCK_TYPE_ID — идентификатор типа инфоблока. Тип должен быть предварительно создан (через админку или CIBlockType::Add).
  • NAME — название инфоблока.
  • LID — массив идентификаторов сайтов (без привязки инфоблок не отобразится).
  • API_CODE — символьный код для ORM (обязателен, если планируете работать через D7).

Технически — создание через D7 ORM (IblockTable::add)

Класс Bitrix\Iblock\IblockTable наследуется от DataManager и имеет метод add(). Вот как это выглядит:

use Bitrix\Iblock\IblockTable;
use Bitrix\Main\Loader;

Loader::includeModule('iblock');

$result = IblockTable::add([
    'IBLOCK_TYPE_ID' => 'mynews',
    'NAME'           => 'Новости моей компании',
    'CODE'           => 'mycompany_news',
    'API_CODE'       => 'News',
    'ACTIVE'         => 'Y',
    'SORT'           => 500,
]);

if ($result->isSuccess()) {
    $iblockId = $result->getId();
    echo 'Инфоблок создан, ID: ' . $iblockId;
} else {
    print_r($result->getErrorMessages());
}

Но после этого необходимо вручную:

  1. Добавить связь с сайтом через IblockSiteTable::add().
  2. Назначить права доступа через IblockGroupTable::add() или CIBlock::SetPermission().
  3. Настроить SEO-наследование и другие параметры.

В связи с этим официальная документация прямо рекомендует использовать для создания инфоблока именно классический API — CIBlock::Add.


А что дальше? Работа с элементами через D7 ORM

После того как инфоблок создан (с API_CODE), скомпилируйте ORM-сущность для работы с элементами:

// Компиляция ORM-класса для инфоблока с API_CODE = 'News'
$elementClassName = \Bitrix\Iblock\IblockTable::compileEntity('News');

// Результат: \Bitrix\Iblock\Elements\ElementNewsTable

// Создание нового элемента через объектный ORM
$element = $elementClassName::createObject();
$element->setName('Новый элемент');
$element->setActive(true);
$element->setSort(500);
$element->save();

echo 'Элемент создан, ID: ' . $element->getId();