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

Как добавить поле к любому объекту

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

  1. Создайте поле с помощью метода Add класса CUserTypeEntity. В параметрах обязательно передайте:
  2. ENTITY_ID — объект. Укажите BLOG_RATING.
  3. FIELD_NAME — код поля, например, UF_RATING.
  4. USER_TYPE_ID — тип данных. Укажите double — число.

$type = new CUserTypeEntity();
$type->Add([
    'ENTITY_ID' => 'BLOG_RATING',
    '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' => 'Подсказка',
    ],
]);
2. Запишите значение с помощью менеджера полей.

/**
 * @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);
3. Прочитайте данные с помощью методов GetUserFieldValue и GetUserFields.

/**
 * @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, но позволяет использовать поля в собственных компонентах и модулях.