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\.
-
Element{ApiCode}Table— статический класс-таблица. Главный интерфейс для операций с базой данных:add(),update(),getList(),delete(). -
EO_Element{ApiCode}— класс-объект. Представляет одну запись. Через него выполняется работа с полями:$element->getName(),$element->setName(),$element->save(). -
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();
Архитектура наследования
Сгенерированные классы не создаются с нуля, они наследуют базовую логику от общих классов модуля. Это обеспечивает единый механизм работы для всех инфоблоков.
-
Повторное использование кода. Стандартная логика CRUD-операций (Create, Read, Update and Delete) реализована в базовых классах.
-
Специализация. Ваш класс автоматически знает структуру именно вашего инфоблока: свойства и поля.
-
Расширяемость. Вы можете унаследовать сгенерированный класс и добавить свою логику.
Схема формирования класса для элементов.
```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() возвращает данные в одном из двух форматов, в зависимости от реализации класса.
- Индексированный массив объектов полей — современный формат. Каждый элемент массива — объект, который наследуется от
Bitrix\Main\ORM\Fields\Field. Например,StringField,IntegerField,Referenceи так далее. Имя поля задается в конструкторе объекта и не зависит от ключа массива.
Подход обеспечивает строгую типизацию, поддержку валидаторов, модификаторов, связей и расширяемость.
- Ассоциативный массив с именами полей в качестве ключей — устаревший формат. Каждый ключ — имя поля, значение — массив с описанием
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 раздела элемента.
Если элемент привязан к нескольким разделам, указывает один из двух вариантов.
-
Основной раздел.
-
Раздел с минимальным
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-параметров раздела и его дочерних объектов,
-
сброс тегированного кеша,
-
установку прав доступа на раздел и его содержимое,
-
проверку дисковой квоты для файловых полей,
-
индексацию модулем поиска,
-
автоматическую привязку свойств к разделам,
-
логирование операций с разделами,
-
автоматическую генерацию символьного кода.
При получении списков разделов:
- проверку прав доступа.