Перейти к содержанию

ORM D7 дает доступ к внутренней структуре инфоблоков.

Основные пространства имен модуля

Архитектура D7 организует классы по пространствам имен. Для работы с инфоблоками через ORM используйте соответствующие пространства имен.

use Bitrix\Iblock\TypeTable; // Типы инфоблоков
use Bitrix\Iblock\IblockTable; // Инфоблоки
use Bitrix\Iblock\SectionTable; // Разделы
use Bitrix\Iblock\ElementTable; // Элементы
use Bitrix\Iblock\PropertyTable; // Свойства

Генерируемые классы: структура и иерархия

Для инфоблока с заполненным API_CODE система автоматически создает три связанных ORM-класса в пространстве имен \Bitrix\Iblock\Elements\.

  1. Element{ApiCode}Table — статический класс-таблица. Главный интерфейс для операций с базой данных: add(), update(), getList(), delete().

  2. EO_Element{ApiCode} — класс-объект. Представляет одну запись. Через него выполняется работа с полями: $element->getName(), $element->setName(), $element->save().

  3. EO_Element{ApiCode}_Collection — класс-коллекция. Представляет набор объектов-записей. Позволяет перебирать записи в цикле и выполнять групповые операции.

Для разделов создается аналогичная тройка классов, но в именах используется ID инфоблока: Section{ID}Table, EO_Section{ID}, EO_Section{ID}_Collection.

Пример работы c разными классами:

use Bitrix\Iblock\Elements\ElementClothesTable;

// 1. Table: получаем данные
$collection = ElementClothesTable::getList()->fetchCollection();

// 2. Collection: работаем с набором
foreach ($collection as $element)
{
    // 3. Object: меняем каждую запись
    $element->setSort(100);
}

// 4. Collection: сохраняем все изменения
$collection->save();

Архитектура наследования

Сгенерированные классы не создаются с нуля, они наследуют базовую логику от общих классов модуля. Это обеспечивает единый механизм работы для всех инфоблоков.

  1. Повторное использование кода. Стандартная логика CRUD-операций (Create, Read, Update and Delete) реализована в базовых классах.

  2. Специализация. Ваш класс автоматически знает структуру именно вашего инфоблока: свойства и поля.

  3. Расширяемость. Вы можете унаследовать сгенерированный класс и добавить свою логику.

Схема формирования класса для элементов.

```plain text \Bitrix\Iblock\ElementTable — общая карта и таблица элементов │ │ getTableName() и getMap() ↓ \Bitrix\Iblock\ORM\CommonElementTable — общая логика элементов инфоблока ↑ \Bitrix\Iblock\ORM\ElementV1Table или \Bitrix\Iblock\ORM\ElementV2Table — база по версии хранения свойств ↑ \Bitrix\Iblock\Elements\Element{ApiCode}Table — ваш класс для работы с элементами конкретного инфоблока

Система выбирает базовый класс по полю `VERSION` инфоблока:

-  `ElementV1Table` — если свойства хранятся в общей таблице,

-  `ElementV2Table` — если свойства хранятся в отдельных таблицах инфоблока.

Класс `Element{ApiCode}Table` создается при первом обращении к нему или при вызове `IblockTable::compileEntity()`. Для класса автоматически задается фильтр по `IBLOCK_ID`, поэтому запросы через него работают с элементами конкретного инфоблока.

Схема наследования для разделов.

```plain text
\Bitrix\Iblock\SectionTable — общая таблица разделов
\Bitrix\Iblock\Section{ID}Table — ваш класс для работы с разделами конкретного инфоблока

Пример. Расширение класса для инфоблока с API_CODE = Clothes.

// Создаем свой класс на основе сгенерированного
class MyClothesTable extends \Bitrix\Iblock\Elements\ElementClothesTable
{
    public static function getActiveClothes()
    {
        return static::getList([
            'filter' => ['ACTIVE' => 'Y'],
            'order' => ['SORT' => 'ASC']
        ])->fetchCollection();
    }
}

Расширяйте сгенерированный класс в своем пространстве имен. Не меняйте класс Element{ApiCode}Table напрямую: он создается системой и зависит от настроек инфоблока.

Добавляйте в наследник методы для типовых выборок, проверок и прикладной логики.

Не используйте наследование для изменения структуры системной карты полей. Для наследников от Element{ApiCode}Table ORM берет уже скомпилированную карту родительского класса, поэтому переопределение getMap() в таком наследнике не добавит поля в карту элемента.

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

use Bitrix\Iblock\Elements\ElementClothesTable;
use Bitrix\Main\ORM\Fields\ExpressionField;

$items = ElementClothesTable::query()
    ->registerRuntimeField(
        new ExpressionField(
            'NAME_LENGTH',
            'LENGTH(%s)',
            ['NAME']
        )
    )
    ->setSelect(['ID', 'NAME', 'NAME_LENGTH'])
    ->fetchAll()
;

В результате в выборке появится поле NAME_LENGTH. Оно действует только в этом запросе и не меняет карту класса.

Карты классов

Каждый ORM-класс содержит метод getMap(). Он возвращает описание структуры таблицы: поля, типы полей, связи с другими сущностями и правила валидации. Система использует карту класса для следующих задач:

  • строит SQL-запросы,

  • преобразует данные между PHP и базой данных,

  • проверяет типы данных при сохранении,

  • организует связи между таблицами.

Классы вида Element{ApiCode}Table получают расширенную карту: базовые поля элементов и свойства инфоблока с заполненным CODE как связи ORM.

Как свойства попадают в карту

Метод getMap() базового класса элемента возвращает поля таблицы b_iblock_element. Свойства конкретного инфоблока добавляются в карту при компиляции класса Element{ApiCode}Table.

В карту попадают только свойства с заполненным полем CODE. Код свойства становится именем поля в ORM-запросе. Например, свойство с кодом BRAND доступно как поле BRAND.

Проверить наличие поля можно через объект ORM-класса.

use Bitrix\Iblock\Elements\ElementClothesTable;

if (ElementClothesTable::getEntity()->hasField('BRAND'))
{
    // Свойство BRAND доступно в карте класса
}

Для каждого свойства система создает отдельный ORM-класс значения вида IblockProperty{ID}Table. В этом классе есть поле VALUE, а если у свойства включено описание — поле DESCRIPTION.

Тип связи зависит от множественности свойства:

  • одиночное свойство добавляется как связь PropertyReference,

  • множественное свойство добавляется как связь PropertyOneToMany.

Базовый тип свойства определяет тип поля VALUE:

  • строка — StringField,

  • число — FloatField,

  • файл, список, привязка к элементу или разделу — IntegerField.

Для некоторых типов система добавляет дополнительные связи. Например, для свойства Файл появляется связь FILE с таблицей файлов, для свойства Список — связь ITEM со значением списка, для свойства Привязка к разделу — связь SECTION.

Пользовательский тип свойства может расширить карту значения свойства через обработчик GetORMFields. Этот способ подходит, когда нужно добавить поля именно к ORM-классу значения свойства.

Для добавления обычных данных к элементу используйте свойства инфоблока, а для временных вычислений в запросе — runtime-поля.

Внимание

Не добавляйте в наследниках Element{ApiCode}Table свои поля с именами системных полей или свойств инфоблока. Такое расширение может нарушить сохранение свойств, связи ORM и работу с версиями хранения VERSION = 1 и VERSION = 2.

Формат ответа

Метод getMap() возвращает данные в одном из двух форматов, в зависимости от реализации класса.

  1. Индексированный массив объектов полей — современный формат. Каждый элемент массива — объект, который наследуется от Bitrix\Main\ORM\Fields\Field. Например, StringField, IntegerField, Reference и так далее. Имя поля задается в конструкторе объекта и не зависит от ключа массива.

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

  1. Ассоциативный массив с именами полей в качестве ключей — устаревший формат. Каждый ключ — имя поля, значение — массив с описанием data_type, title, validation и так далее. Не поддерживает сложные типы полей и объектную логику.

Пример ответа метода getMap() для ElementTable.

Array
(
    [ID] => Bitrix\Main\ORM\Fields\IntegerField Object
        (
            [name:protected] => ID
            [dataType:protected] =>
            [initialParameters:protected] => Array
                (
                    [primary] => 1
                    [autocomplete] => 1
                    [title] => Идентификатор
                )

            [title:protected] => Идентификатор
            [validation:protected] =>
            [validators:protected] =>
            [additionalValidators:protected] => Array()

            [fetchDataModification:protected] =>
            [fetchDataModifiers:protected] =>
            [additionalFetchDataModifiers:protected] => Array()

            [saveDataModification:protected] =>
            [saveDataModifiers:protected] =>
            [additionalSaveDataModifiers:protected] => Array()

            [isSerialized:protected] =>
            [parentField:protected] =>
            [entity:protected] =>
            [connection:protected] =>
            [is_primary:protected] => 1
            [is_unique:protected] =>
            [is_required:protected] =>
            [is_autocomplete:protected] => 1
            [is_private:protected] =>
            [is_nullable:protected] =>
            [is_binary:protected] =>
            [is_fulltext:protected] =>
            [column_name:protected] => ID
            [default_value:protected] =>
            [size:protected] => 4
        )

    [TIMESTAMP_X] => Bitrix\Main\ORM\Fields\DatetimeField Object
        (
            [name:protected] => TIMESTAMP_X
            ...
        )
    ...
)

Описание полей классов таблиц

Данные модуля хранятся в отдельных таблицах. Каждой таблице соответствует класс в ORM. Для обращения к данным используйте эти классы.

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

Примечание

В таблицах обязательные поля отмечены *.

Тип информационного блока

Класс Bitrix\Iblock\TypeTable работает с таблицей типов инфоблоков. Типы определяют категории для группировки инфоблоков — например, news для новостей или catalog для товаров. Параметры применяются ко всем инфоблокам одного типа.

|

|| Поле | Тип данных | Описание || || ID* | string(50) | Символьный идентификатор типа. Должен быть уникальным. Используется в настройках и API. Примеры: catalog, news. || || SECTIONS* | char(1) | Разрешает создавать разделы в инфоблоках этого типа. Возможные значения:

  • Y — да,

  • N — нет.

Значение по умолчанию — Y. || || EDIT_FILE_BEFORE | string(255) | Полный путь к PHP-обработчику, который меняет массив полей элемента.

Файл должен выполняться перед сохранением формы редактирования элемента. || || EDIT_FILE_AFTER | string(255) | Полный путь к PHP-обработчику, который меняет HTML-код формы.

Файл должен выполняться после вывода стандартной формы редактирования элемента. || || IN_RSS* | char(1) | Разрешает публикацию элементов инфоблоков этого типа в RSS. Возможные значения:

  • Y — да,

  • N — нет.

Значение по умолчанию — N. || || SORT* | int | Число для сортировки типа в списках. Меньше число — выше в списке.

Значение по умолчанию — 500. || |#

Информационный блок

Класс Bitrix\Iblock\IblockTable хранит основные настройки каждого инфоблока. Каждый инфоблок ссылается на свой тип через поле IBLOCK_TYPE_ID.

|

|| Поле | Тип данных | Описание || || ID* | int | Уникальный числовой идентификатор инфоблока. || || TIMESTAMP_X* | datetime | Дата и время последнего изменения записи инфоблока.

Значение по умолчанию — текущее время. || || IBLOCK_TYPE_ID* | string(50) | Символьный код типа инфоблока. Связывает инфоблок с его типом. || || CODE | string(50) | Символьный код инфоблока. Часто используют в коде вместо числового ID. || || API_CODE | string(255) | Символьный код для генерации ORM-сущностей. || || NAME* | string(255) | Название инфоблока. || || ACTIVE* | char(1) | Флаг активности инфоблока.

Возможные значения:

  • Y — активен,

  • N — не активен.

Значение по умолчанию — Y. || || SORT* | int | Порядок сортировки инфоблока в списках. Меньше число — выше в списке.

Значение по умолчанию — 500. || || LIST_PAGE_URL | string(255) | Шаблон URL для страницы списка элементов. || || DETAIL_PAGE_URL | string(255) | Шаблон URL для детальной страницы элемента. || || SECTION_PAGE_URL | string(255) | Шаблон URL для страницы раздела. || || CANONICAL_PAGE_URL | string(255) | Шаблон для формирования канонического URL элемента. || || PICTURE | int | ID изображения инфоблока в таблице файлов b_file. || || DESCRIPTION | text | Текстовое описание инфоблока. || || DESCRIPTION_TYPE* | char(4) | Формат хранения описания. Возможные значения:

  • text — обычный текст,

  • html — HTML-код.

Значение по умолчанию — text. || || XML_ID | string(255) | Внешний код. Используется для обмена данными с внешними системами. || || RSS_ACTIVE* | char(1) | Разрешает динамическую генерацию RSS-ленты для инфоблока. Значение по умолчанию — Y. || || RSS_TTL* | int | Время жизни в часах для прегенерируемого RSS-файла и интервал между его обновлениями. Значение по умолчанию — 24. || || RSS_FILE_ACTIVE* | char(1) | Включает прегенерацию RSS в статичный файл. Значение по умолчанию — N. || || RSS_FILE_LIMIT | int | Количество элементов, выгружаемых в прегенерируемый RSS-файл. || || RSS_FILE_DAYS | int | Количество последних дней, элементы за которые попадают в RSS-файл. Значение -1 — без ограничения по времени. || || RSS_YANDEX_ACTIVE* | char(1) | Экспортировать RSS-файл в формате для Яндекса. Значение по умолчанию — N. || || INDEX_ELEMENT* | char(1) | Разрешает индексацию элементов модулем поиска. Значение по умолчанию — Y. || || INDEX_SECTION* | char(1) | Разрешает индексацию разделов модулем поиска. Значение по умолчанию — N. || || WORKFLOW* | char(1) | Включает поддержку документооборота. Значение по умолчанию — Y. || || BIZPROC* | char(1) | Включает поддержку бизнес-процессов.

Значение по умолчанию — N. || || SECTION_CHOOSER | char(1) | Определяет интерфейс выбора раздела в форме редактирования элемента.

Возможные значения:

  • D — выпадающие списки,

  • L — единый список,

  • P — поле с автодополнением по пути. || || LIST_MODE | char(1) | Режим отображения элементов и разделов в административной части. Возможные значения:

  • S — раздельно,

  • C — совмещенный список,

  • пустое значение — режим по умолчанию из настроек модуля. || || RIGHTS_MODE | char(1) | Режим управления правами доступа. Возможные значения:

  • S — стандартный,

  • E — расширенный.

Значение по умолчанию — S. || || SECTION_PROPERTY | char(1) | Включает привязку свойств элементов к разделам. Используется для умного фильтра. Только для чтения. || || PROPERTY_INDEX | char(1) | Состояние фасетного индекса для свойств. Возможные значения:

  • N — нет индекса,

  • Y — индекс включен,

  • I — индекс нужно обновить. || || VERSION*

Внимание

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

| int | Определяет схему хранения значений свойств элементов.

Возможные значения:

  • 1 — в общей таблице,

  • 2 — в отдельной таблице для каждого инфоблока.

Значение по умолчанию — 1.

Схема 2 режим повышает производительность при большой нагрузке, но усложняет структуру базы данных. Выбирайте схему хранения, исходя из объема данных и требований к производительности вашего проекта. || || EDIT_FILE_BEFORE | string(255) | Путь к PHP-обработчику, который меняет поля элемента перед сохранением формы. Переопределяет настройку типа. || || EDIT_FILE_AFTER | string(255) | Путь к PHP-обработчику, который меняет HTML-форму редактирования элемента. Переопределяет настройку типа. || |#

Привязка инфоблока к сайтам

Класс Bitrix\Iblock\IblockSiteTable управляет доступностью инфоблоков на разных сайтах. Один инфоблок может принадлежать нескольким сайтам — для каждой связи создают отдельную запись. Это позволяет использовать общий каталог товаров или новостей в рамках нескольких проектов.

Поле Тип данных Описание
IBLOCK_ID* int Идентификатор информационного блока.
SITE_ID* char(2) Идентификатор сайта.

Инфоблок может принадлежать нескольким сайтам. Для каждой связи создают отдельную строку.

Разделы

Класс Bitrix\Iblock\SectionTable работает с иерархической структурой разделов. Разделы организуют элементы в дерево — например, категории товаров или разделы статей. Таблица хранит основные данные разделов и технические поля для работы с вложенностью.

|

|| Поле | Тип данных | Описание || || ID* | int | Уникальный числовой идентификатор раздела. || || TIMESTAMP_X* | datetime | Дата и время последнего изменения раздела.

Значение по умолчанию — текущее время. || || MODIFIED_BY* | int | ID пользователя, который изменил раздел последним.

Значение по умолчанию — ID текущего пользователя. || || DATE_CREATE* | datetime | Дата и время создания раздела.

Значение по умолчанию — текущее время. || || CREATED_BY* | int | ID пользователя, который создал раздел.

Значение по умолчанию — ID текущего пользователя. || || IBLOCK_ID* | int | ID информационного блока, к которому относится раздел. || || IBLOCK_SECTION_ID | int | ID родительского раздела. Пустое значение или NULL — раздел корневой. || || ACTIVE* | char(1) | Флаг активности раздела. Возможные значения:

  • Y — активен,

  • N — не активен.

Значение по умолчанию — Y. || || GLOBAL_ACTIVE | char(1) | Общий флаг активности с учетом родительских разделов. Вычисляется автоматически. || || SORT* | int | Порядок сортировки среди разделов одного уровня.

Значение по умолчанию — 500. || || NAME* | string(255) | Название раздела. || || PICTURE | int | ID изображения раздела в таблице файлов b_file. || || DETAIL_PICTURE | int | ID детального изображения раздела в таблице файлов. || || DESCRIPTION | text | Текстовое описание раздела. || || DESCRIPTION_TYPE* | char(4) | Формат хранения описания. Возможные значения:

  • text — обычный текст,

  • html — HTML-код.

Значение по умолчанию — text. || || CODE | string(255) | Символьный код раздела. || || XML_ID | string(255) | Внешний код. Используют для обмена данными с внешними системами. || || LEFT_MARGIN | int | Левая граница для nested sets. Вычисляется автоматически. || || RIGHT_MARGIN | int | Правая граница для nested sets. Вычисляется автоматически. || || DEPTH_LEVEL | int | Уровень вложенности раздела. Вычисляется автоматически. || || SEARCHABLE_CONTENT | text | Текст для поиска. Вычисляется автоматически из названия и описания. || || SECTION_PAGE_URL | string(255) | Шаблон URL страницы раздела. Вычисляется автоматически из настроек инфоблока. || |#

Элементы

Класс Bitrix\Iblock\ElementTable хранит основные данные элементов — товаров, новостей, статей. Здесь находятся общие для всех типов элементов поля: названия, описания, изображения, даты и флаги активности. Специфичные данные система хранит в свойствах.

|

|| Поле | Тип данных | Описание || || ID* | int | Уникальный числовой идентификатор элемента. || || TIMESTAMP_X* | datetime | Дата и время последнего изменения элемента.

Значение по умолчанию — текущее время. || || MODIFIED_BY* | int | ID пользователя, который изменил элемент последним.

Значение по умолчанию — ID текущего пользователя. || || DATE_CREATE* | datetime | Дата и время создания элемента.

Значение по умолчанию — текущее время. || || CREATED_BY* | int | ID пользователя, который создал элемент.

Значение по умолчанию — ID текущего пользователя. || || IBLOCK_ID* | int | ID информационного блока, к которому относится элемент. || || IBLOCK_SECTION_ID | int | ID раздела элемента.

Если элемент привязан к нескольким разделам, указывает один из двух вариантов.

  1. Основной раздел.

  2. Раздел с минимальным ID, если не выбран основной.

Пустое значение — элемент не привязан к разделам. || || ACTIVE* | char(1) | Флаг активности элемента.

Возможные значения:

  • Y — активен,

  • N — не активен.

Значение по умолчанию — Y. || || ACTIVE_FROM | datetime | Дата и время начала активности элемента. || || ACTIVE_TO | datetime | Дата и время окончания активности элемента. || || SORT* | int | Порядок сортировки элемента в рамках одного раздела. Значение по умолчанию — 500. || || NAME* | string(255) | Название элемента. || || PREVIEW_PICTURE | int | ID изображения — анонса элемента в таблице файлов b_file. || || PREVIEW_TEXT | text | Текст анонса элемента. || || PREVIEW_TEXT_TYPE* | char(4) | Формат текста анонса. Возможные значения:

  • text — обычный текст,

  • html — HTML-код.

Значение по умолчанию — text. || || DETAIL_PICTURE | int | ID детального изображения элемента в таблице файлов. || || DETAIL_TEXT | text | Детальное описание элемента. || || DETAIL_TEXT_TYPE* | char(4) | Формат детального текста. Возможные значения:

  • text — обычный текст,

  • html — HTML-код.

Значение по умолчанию — text. || || CODE | string(255) | Символьный код элемента. || || XML_ID | string(255) | Внешний код. Используется для обмена данными с внешними системами. || || TAGS | string(255) | Теги элемента. Используют для построения облака тегов. || || SHOW_COUNTER | int | Количество просмотров элемента. Увеличивается при вызове CIBlockElement::CounterInc(). || || SHOW_COUNTER_START | datetime | Дата и время первого просмотра элемента. Заполняется при первом вызове CIBlockElement::CounterInc(). || || SEARCHABLE_CONTENT | text | Текст для поиска, который вычисляется автоматически из названия и описаний.

А также значения свойств, для которых отмечено, что они участвуют в поиске. || || WF_STATUS_ID* | int | ID статуса элемента в документообороте.

Значение по умолчанию — 1. || || WF_COMMENTS | text | Комментарий администратора документооборота. || || LOCK_STATUS | string | Текущий статус блокировки для редактирования.

Используется в инфоблоках, которые участвуют в документообороте и бизнес-процессах. Вычисляется автоматически.

Возможные значения:

  • red — заблокирован другим пользователем,

  • green — доступен для редактирования,

  • yellow — заблокирован текущим пользователем. || |#

Привязка элементов к разделам

Класс Bitrix\Iblock\SectionElementTable управляет связями между элементами и разделами. Один элемент может принадлежать к нескольким разделам одновременно — например, товар может быть в категориях Ноутбуки и Распродажа. Каждую такую связь система хранит отдельной строкой.

|

|| Поле | Тип данных | Описание || || IBLOCK_SECTION_ID* | int | ID раздела. || || IBLOCK_ELEMENT_ID* | int | ID элемента. || || ADDITIONAL_PROPERTY_ID* | char(1) | Признак привязки через свойство. Копирует значение свойства типа Привязка к разделу.

Если null — элемент привязан к разделу напрямую. || |#

Свойства инфоблока

Класс Bitrix\Iblock\PropertyTable определяет дополнительные поля для элементов и разделов. Свойства расширяют базовую структуру — добавляют цвета к товарам, файлы к документам, теги к статьям. В таблице хранятся тип свойства, обязательность, множественность и другие параметры.

|

|| Поле | Тип данных | Описание || || ID* | int | Уникальный числовой идентификатор свойства. || || TIMESTAMP_X* | datetime | Дата и время последнего изменения свойства.

Значение по умолчанию — текущее время. || || IBLOCK_ID* | int | ID информационного блока, которому принадлежит свойство. || || NAME* | string(255) | Название свойства. Отображается в административном интерфейсе. || || ACTIVE* | char(1) | Флаг активности свойства. Возможные значения:

  • Y — активно,

  • N — не активно.

Значение по умолчанию — Y. || || IS_REQUIRED | char(1) | Обязательно ли заполнение свойства при редактировании элемента. Возможные значения:

  • Y — да,

  • N — нет. || || SORT* | int | Порядок сортировки свойства в списке и форме. Значение по умолчанию — 500. || || CODE | string(50) | Символьный код свойства. || || DEFAULT_VALUE | text | Значение свойства по умолчанию. Формат зависит от типа свойства.

Не используется для свойств типа Список L. || || PROPERTY_TYPE* | char(1) | Базовый тип свойства. Возможные значения:

  • S — строка,

  • N — число,

  • F — файл,

  • L — список,

  • E — привязка к элементам,

  • G — привязка к разделам. || || ROW_COUNT* | int | Количество строк в поле ввода значения для текстовых свойств.

Значение по умолчанию — 1. || || COL_COUNT* | int | Количество столбцов в поле ввода значения для строк и текста.

Значение по умолчанию — 30. || || LIST_TYPE* | char(1) | Способ отображения значений для свойств типа Список L. Возможные значения:

  • L — выпадающий список,

  • C — флажки для множественных или радио-кнопки для одиночных.

Значение по умолчанию — L. || || MULTIPLE* | char(1) | Флаг множественности свойства. Возможные значения:

  • Y — свойство может иметь несколько значений,

  • N — свойство может иметь только одно значение.

Значение по умолчанию — N. || || XML_ID | string(100) | Внешний код свойства. Используют для обмена данными с внешними системами. || || FILE_TYPE | string(200) | Маска допустимых расширений для свойств типа Файл F, например, jpg, gif, png. || || MULTIPLE_CNT | int | Количество отображаемых строк для ввода значений множественного свойства в форме.

Значение по умолчанию — 5. || || LINK_IBLOCK_ID | int | ID информационного блока для свойств типов Привязка к элементу E и Привязка к разделу G. Задает инфоблок, к элементам или разделам которого осуществляется привязка. || || WITH_DESCRIPTION | char(1) | Разрешает добавление текстового описания к каждому значению свойства.

Доступно для типов Строка S, Число N, Файл F. Возможные значения:

  • Y — да,

  • N — нет. || || SEARCHABLE* | char(1) | Включает индексацию значений свойства для модуля поиска. Возможные значения:

  • Y — да,

  • N — нет.

Значение по умолчанию — N. || || FILTRABLE* | char(1) | Разрешает фильтрацию по свойству в административном списке элементов. Возможные значения:

  • Y — да,

  • N — нет.

Значение по умолчанию — N. || || VERSION* | int | Схема хранения значений свойства, наследуется от настройки инфоблока. Возможные значения:

  • 1 — в общей таблице,

  • 2 — в отдельной таблице.

Значение по умолчанию — 1. || || USER_TYPE | string(255) | Идентификатор пользовательского типа свойства. Определяет дополнительную логику обработки и интерфейс ввода.

Примеры: HTML, DateTime, directory, map_yandex. || || USER_TYPE_SETTINGS | text | Настройки пользовательского типа свойства в формате сериализованного массива. || || HINT | string(255) | Текст подсказки, отображаемый рядом с полем в форме редактирования. || |#

Значения списочных свойств

Класс Bitrix\Iblock\PropertyEnumerationTable хранит варианты значений для свойств типа Список. Например, варианты цвета или статусы заказа.

|

|| Поле | Тип данных | Описание || || ID* | int | Уникальный числовой идентификатор значения. || || PROPERTY_ID* | int | ID свойства типа Список L, к которому относится значение. || || VALUE* | string(255) | Текстовое значение варианта списка. || || DEF | char(1) | Флаг значения по умолчанию для этого свойства. Возможные значения:

  • Y — да,

  • N — нет.

Значение по умолчанию — N. || || SORT | int | Порядок сортировки значения в списке.

Значение по умолчанию — 500. || || XML_ID* | string(200) | Уникальный внешний код значения. Используется для обмена данными с внешними системами. Важно для импорта. || |#

Свойства

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

Базовые типы свойств

Строка S

Значение хранится как текст. Длина текста ограничена типом поля базы данных.

В форме редактирования можно задавать визуальные ограничения через поля ROW_COUNT и COL_COUNT. Значение по умолчанию должно быть строкой, числом или булевым значением. Массивы не поддерживаются.

Число N

Значение хранится как число. Операции сортировки и сравнения работают с числами.

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

Список L

Значения списка хранятся в отдельной таблице b_iblock_property_enum. Пользователь выбирает значение из заранее заданного списка.

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

Файл F

Значение хранит идентификатор файла из таблицы b_file. Вы можете ограничивать типы загружаемых файлов через маску в поле FILE_TYPE.

Каждый загружаемый файл проходит проверку через систему CFile. Система проверяет размер файла, расширение и другие параметры.

Привязка к элементу E

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

Система проверяет существование элемента при сохранении. Некоторые настройки становятся недоступны при использовании этого свойства в умном фильтре.

Привязка к разделу G

Значение — ID раздела инфоблока. Система проверяет, что раздел существует и принадлежит указанному инфоблоку. Работает аналогично типу E.

Пользовательские типы свойств

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

Типы Главного модуля

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

  • Date и DateTime — для работы с датами и временем. Используют виджеты выбора даты.

  • ElementXmlID — привязка к элементу по внешнему идентификатору XML_ID для обмена данными.

  • FileMan — путь к файлу в структуре сайта. Использует диалог выбора файлов.

  • HTML — текст в формате HTML с визуальным редактором. Не поддерживает множественные значения.

  • EList — выпадающий список элементов из другого инфоблока. Аналогичен типу Привязка к элементу E , но с отдельным интерфейсом.

  • Sequence — автоматический счетчик. Значение увеличивается при создании каждого нового элемента.

  • EAutocomplete и SectionAuto — привязка к элементам и разделам с автодополнением.

Типы других модулей

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

  • SKU — связь с торговыми предложениями из модуля Торговый каталог.

  • ECrm — привязка к объектам CRM: лидам, сделкам, контактам, компаниям и так далее.

  • Money — денежная сумма с указанием валюты.

  • DiskFile — файл из модуля Диск.

  • map_google, map_yandex — координаты на карте.

  • TopicID — привязка к теме форума.

  • directory — связь с highload-блоком.

  • UserID — привязка к пользователям.

  • employee — привязка к сотрудникам.

Ограничения при создании и обновлении свойства

Система проверяет свойства при сохранении. Основные ограничения:

  • Поле NAME обязательное и не может быть пустым.

  • Поле CODE должно соответствовать правилам:

  • не может начинаться с цифры,

  • может содержать только латинские буквы, цифры и символ подчеркивания,

  • должно быть уникальным в пределах инфоблока.

  • Поле IBLOCK_ID должно ссылаться на существующий инфоблок.

  • Для простых типов без USER_TYPE значение DEFAULT_VALUE должно быть скалярным — массив или объект вызовут ошибку.

  • Если свойство обязательное IS_REQUIRED = 'Y', система проверяет, чтобы значение было заполнено при сохранении элемента.

Особенности привязки к элементам и разделам

Для типов свойств привязка к элементу E и привязка к разделу G действуют дополнительные правила.

  • Система ожидает целочисленный ID элемента или раздела.

  • Если задан LINK_IBLOCK_ID, значение должно ссылаться на объект из указанного инфоблока.

  • Для множественных свойств значения хранятся в специальных таблицах.

  • ORM представляет эти связи как отношения между сущностями.

Эти ограничения обеспечивают целостность данных и правильную работу фильтрации и сортировки.

Как выбрать тип свойства

Выбор типа свойства влияет на хранение данных, производительность и возможности фильтрации.

Число или строка

Используйте тип Число N:

  • для сортировки значений по величине,

  • применения диапазонных фильтров,

  • вычислений или агрегации данных.

Примеры: цены, веса, рейтинги, вычисление суммы или средних значений.

Используйте тип Строка S, если:

  • значение содержит буквы и специальные символы,

  • важнее поиск по подстроке, чем числовые операции,

  • значение имеет сложный формат.

Примеры: артикулы, коды, сложные значения вида A-001-2025.

Список, справочник или привязка

Обычный список L подходит:

  • для небольшого набора значений,

  • значений, которые редко меняются,

  • простого управления через форму свойства.

Примеры: статусы, типы, цвета из короткого списка.

Справочник на highload-блоке directory используйте:

  • для большого количества значений в сотнях или тысячах,

  • значений с дополнительными полями, например, изображениями, кодами, сортировкой,

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

Привязку к элементам E или разделам G рекомендуется использовать, когда:

  • значение представляет собой самостоятельный объект с собственной логикой,

  • нужны обратные связи и сложные выборки через ORM,

  • значение имеет свою карточку с дополнительными полями.

Когда применять пользовательские типы

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

  • HTML — для текста с форматированием: описания, статьи.

  • Date/DateTime — для отдельных дат: дата поставки, начало акции.

  • Sequence — для автоматической нумерации: номера заказов, документов.

  • ElementXmlID — для интеграции с внешними системами по внешним ключам.

  • ECrm, UserID — для связи с объектами CRM или пользователями.

  • map_* — для хранения координат на карте.

Множественные значения и описания

Опция MULTIPLE = 'Y' дает возможность указывать для свойства несколько значений, например, цветов, размеров, связанных товаров. Если свойство множественное, можно дополнительно включить опцию WITH_DESCRIPTION = 'Y'. Она позволяет добавить текстовый комментарий к каждому отдельному значению

Примечание

Некоторые типы свойств имеют ограничения на множественность и дополнительные настройки.

Обратная совместимость

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

Совет

Для реализации таких функций используйте классическое API или комбинируйте подходы. Примеры в статье Работа с инфоблоками через API.

API работы с элементами

При добавлении, изменении, удалении элементов отдельно нужно реализовывать:

  • ресайз изображений PREVIEW_PICTURE и DETAIL_PICTURE,

  • автоматическое обновление фасетного индекса,

  • автоматическое обновление SEO-параметров элемента,

  • автоматический сброс тегированного кеша,

  • установку прав доступа,

  • поддержку документооборота,

  • проверку дисковой квоты для файловых свойств,

  • пересчет доступности товаров с торговыми предложениями,

  • пересчет цен для сортировки товаров с торговыми предложениями,

  • индексацию модулем поиска,

  • логирование операций с элементами,

  • автоматическую генерацию символьного кода.

При получении списков элементов:

  • проверку прав доступа,

  • автоматическую фильтрацию неопубликованных элементов при использовании документооборота.

API работы с разделами

При добавлении, изменении, удалении разделов отдельно нужно реализовывать:

  • автоматический пересчет полей иерархии LEFT_MARGIN, RIGHT_MARGIN, GLOBAL_ACTIVE, DEPTH_LEVEL,

  • ресайз изображений раздела,

  • обновление фасетного индекса,

  • обновление SEO-параметров раздела и его дочерних объектов,

  • сброс тегированного кеша,

  • установку прав доступа на раздел и его содержимое,

  • проверку дисковой квоты для файловых полей,

  • индексацию модулем поиска,

  • автоматическую привязку свойств к разделам,

  • логирование операций с разделами,

  • автоматическую генерацию символьного кода.

При получении списков разделов:

  • проверку прав доступа.