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

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

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

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

  1. Создайте поле с помощью метода Add класса CUserTypeEntity. В параметрах обязательно передайте:
    • ENTITY_ID — объект. Укажите BLOG_RATING.
    • FIELD_NAME — код поля, например, UF_RATING.
    • 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, но позволяет использовать поля в собственных компонентах и модулях.

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