305  /  381
Справочник

Поля к нештатным объектам и новые объекты

Просмотров: 59421
Дата последнего изменения: 05.09.2025
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Создание пользовательского поля к нештатным объектам

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

Рассмотрим это на примере комментариев блога. Например, у каждого комментария необходимо создавать свойство Рейтинг. Создаем в административной части пользовательское свойство нужного типа (Настройки > Настройки продукта > Пользовательские поля). Заполняем все поля, в поле Объект указываем любое придуманное имя объекта, главное, чтобы оно было уникально. В нашем случае, напишем BLOG_RATING.

$type = new CUserTypeEntity();
$type->Add([
    'ENTITY_ID' => 'BLOG_POST',
    'FIELD_NAME' => 'UF_RATING',
    'USER_TYPE_ID' => 'double',
    // необязательно
    'SETTINGS' => [
        'DEFAULT_VALUE' => 5,
    ],
    'LIST_COLUMN_LABEL' => [
        'ru' => 'Название в списке',
    ],
    'LIST_FILTER_LABEL' => [
        'ru' => 'Название в фильтре',
    ],
    'EDIT_FORM_LABEL' => [
        'ru' => 'Название в форме',
    ],
    'HELP_MESSAGE' => [
        'ru' => 'Подсказка',
    ],
]);

Для записи значений пользовательских свойств можно использовать следующие функции:

/**
 * @var \CUserTypeManager $manager
 */
$manager = \Bitrix\Main\UserField\Internal\UserFieldHelper::getInstance()->getManager();

$entityId = 'BLOG_RATING';
$itemId = 123;
$fields = [
 'UF_RATING' => 50,
];

$manager->Update($entityId, $itemId, $fields); 

Для чтения значений пользовательских свойств можно использовать:

/**
 * @var \CUserTypeManager $manager
 */
$manager = \Bitrix\Main\UserField\Internal\UserFieldHelper::getInstance()->getManager();

$entityId = 'BLOG_RATING';
$itemId = 123;

$specificValue = $manager->GetUserFieldValue($entityId, 'UF_RATING', $itemId);
$allFields = $manager->GetUserFields($entityId, $itemId);

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

38
Курсы разработаны в компании «1С-Битрикс»