Введение и базовые концепции

В Bitrix Framework есть два типа контента.

  • Статический — данные, которые редко меняются: текст страниц, контакты.

  • Динамический — данные, которые обновляются регулярно: каталог товаров, новости.

Модуль Информационные блоки предназначен для работы с динамическим контентом. Он задает структуру и позволяет управлять однотипными данными. Система использует объектную модель ORM и дает методы API для работы с данными без написания сложных SQL-запросов.

Применять модуль можно для создания каталогов товаров, новостных лент, справочников и любых других структурированных данных.

Основные термины

Тип информационного блока — группа для инфоблоков с похожей структурой. Тип определяет, можно ли создавать разделы. Примеры: каталог товаров или публикации.

Информационный блок — основной объект модуля для хранения однотипных элементов. Его можно представить как таблицу в базе данных. Система автоматически создает такую таблицу и управляет ею. Инфоблок содержит фиксированный набор полей и список свойств, которые создает пользователь.

Элемент — запись в инфоблоке. Основная единица динамического контента: один товар, одна новость, одна статья.

Раздел — группа для элементов. Разделы поддерживают иерархию. У раздела могут быть подразделы, например, у инфоблока Каталог может быть раздел Электроника и подраздел Смартфоны.

Свойство — дополнительная характеристика элемента. Свойства настраиваются для каждого инфоблока отдельно. Они бывают разных типов: строка, число, список, привязка к другим элементам и так далее.

Настройки в интерфейсе продукта

Работа с информационными блоками состоит из нескольких шагов. Сначала создают тип инфоблока, затем сам инфоблок. Для созданного инфоблока настраивают свойства, создают структуру разделов и добавляют элементы.

Чтобы опубликовать данные из инфоблока, используйте компоненты. Компоненты извлекают информацию и выводят на сайте в заданном формате.

Подробнее в статье Компоненты

Настроить модуль

Модуль установлен в системе по умолчанию. Настроить модуль можно в разделе Настройки > Настройки продукта > Настройки модулей > Информационные блоки.

Создать и редактировать тип инфоблока

Работайте с типами инфоблоков в разделе Контент > Инфоблоки > Типы инфоблоков. Здесь вы создаете новые типы и изменяете существующие.

Создать и редактировать инфоблок

Информационными блоками можно управлять в разделе Контент > Инфоблоки > Типы инфоблоков > [нужный_тип]. Можно создать новый инфоблок или изменить параметры существующего. В форме редактирования инфоблока свойства настраиваются в подразделе Свойства, права доступа на вкладке Доступ.

Работать с инфоблоком

После создания инфоблока вы можете добавлять и редактировать разделы и элементы по пути Контент > [Название типа инфоблока] > [Название вашего инфоблока].

Связи между данными

Информационные блоки независимы друг от друга. Каждый блок можно использовать в разных разделах сайта. Связи между блоками устанавливают через специальные свойства.

Привязка к элементам. Свойство, которое связывает элемент с другим элементом любого инфоблока. Используют для связей товар-товар, статья-товар, похожие материалы и так далее.

Привязка к разделам. Свойство, которое связывает элемент с разделом любого инфоблока. Используют для дополнительной категоризации. Свойство не может быть привязано к разделу того же информационного блока.

В PHP-коде значения этих свойств возвращаются как массив ID.

Символьные коды

Символьный код — символьный идентификатор. Должен быть уникальным. Можно использовать латинские буквы, цифры и дефис.

Символьный код используют для обращения к объектам в PHP-коде. Каждый объект, с которым нужно работать, должен иметь заполненный символьный код: инфоблок и его свойства, разделы, элементы.

Символьный код API — символьный идентификатор инфоблока для использования в ORM и обращения к REST API. Это строка от 1 до 50 символов, должна начинаться с буквы и состоять из латинских букв и цифр.

Система автоматически генерирует классы ORM на основе API_CODE при первом обращении к ним. Имя класса формируется с учетом регистра. Рекомендуется использовать CamelCase для API_CODE — он обеспечит читаемые имена сгенерированных классов.

Чтобы создать аннотации к сгенерированным классам, перейдите в папку /bitrix/ проекта и используйте CLI-команду orm:annotate.

Подробнее в статье Аннотации классов

Символьный код API нужно указать в настройках инфоблока на странице Контент > Инфоблоки > [нужный_инфоблок].

Пример. Класс для работы с элементами инфоблока формируется по шаблону Element{ApiCode}Table. Укажем для каталога Одежда символьный код API — Clothes. Тогда система создаст класс ElementClothesTable для работы с элементами этого инфоблока.

Представление инфоблоков в ORM

ORM (Object-Relational Mapping) позволяет работать с базой данных через объекты без прямых SQL-запросов.

Подробнее в разделе ORM

Каждый инфоблок с заданным символьным кодом API становится отдельной сущностью в ORM. Имя класса сущности включает в себя значение API_CODE, это обеспечивает уникальность классов.

Свойства инфоблоков в ORM — это отдельные связанные сущности, что позволяет получать значения свойств и их описание через методы ORM. У каждой такой сущности есть два ключевых поля: VALUE и DESCRIPTION.

  • Единичные свойства представляются как отношение Reference.

  • Множественные свойства представляются как отношение OneToMany.

У некоторых типов свойств есть дополнительные поля. Например, у свойства Привязка к элементу появляется поле ELEMENT, которое ссылается на сущность элемента инфоблока.

Ориентироваться среди большого количества свойств помогает механизм аннотаций.

API модуля

Перед использованием функций модуля Информационные блоки, его нужно подключить.

\Bitrix\Main\Loader::includeModule('iblock');
        

Для работы с инфоблоками доступны два основных подхода: классический API и современный объектный ORM. В новых проектах рекомендуется использовать ORM, так как он предоставляет типобезопасный способ работы с данными.

use Bitrix\Iblock\Elements\ElementClothesTable;
        
        // Получить класс сущности для инфоблока с API_CODE="Clothes"
        $entityClass = new ElementClothesTable;
        
        // Создать новый элемент
        $element = $entityClass::createObject();
        $element->setName('Новый товар через ORM');
        $element->setPreviewText('Описание товара');
        $element->save();
        
        // Получить элемент по ID
        $existingElement = $entityClass::getByPrimary($element->getId())
            ->fetchObject();
        
        if ($existingElement)
        {
            // Работать со свойствами элемента
            $value = $existingElement->getSomeProperty();
        }
        

Версии хранения свойств инфоблоков

Bitrix Framework поддерживает две версии хранения свойств. Версию задают при создании инфоблока в поле VERSION.

  1. Версия 1 — каждое свойство хранится в отдельной строке общей таблицы b_iblock_element_property.

  2. Версия 2 — все значения свойств одного элемента хранятся в одной строке выделенной таблицы b_iblock_element_prop_s{IBLOCK_ID}, где {IBLOCK_ID} — идентификатор инфоблока. Выборка элементов со всеми свойствами выполняется быстро. Не рекомендуется, если количество свойств превышает 50.

API одинаковый для обеих архитектур. Выбор версии зависит от реализации конкретного проекта.

Для инфоблоков 2.0 методы PropertyTable::add(), PropertyTable::update() и PropertyTable::delete() не работают. Управлять свойствами таких инфоблоков можно через классическое API или административный интерфейс.