Блог Горошко Андрея 1C-Битрикс Подключение Пользовательских полей (UF) к своим ORM-сущностям

Подключение Пользовательских полей (UF) к своим ORM-сущностям

Средний рейтинг
Еще нет оценок

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

Но что, если вы создали свою таблицу (ORM-сущность) и хотите дать администраторам возможность добавлять к ней новые поля (строки, списки, файлы) прямо из админки, без программирования?

Битрикс позволяет «подключить» механизм UF к любой сущности.

Шаг 1: Доработка ORM-сущности

В ваш класс Table (наследник DataManager) нужно добавить всего один метод — getUfId().

namespace My\Module;

use Bitrix\Main\Entity;

class MyCustomTable extends Entity\DataManager
{
    public static function getTableName()
    {
        return 'my_custom_table';
    }

    public static function getMap()
    {
        return [
            new Entity\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new Entity\StringField('NAME'),
            // ... другие поля
        ];
    }

    // --- Магия здесь ---
    public static function getUfId()
    {
        // Придумываем уникальный идентификатор для нашей сущности
        // Обычно: МОДУЛЬ_ИМЯСУЩНОСТИ
        return 'MY_MODULE_CUSTOM_ENTITY';
    }
}

Шаг 2: Добавление полей в админке

  1. Перейдите в Настройки -> Настройки продукта -> Пользовательские поля.
  2. Нажмите «Добавить поле».
  3. В URL браузера вы увидите параметр ENTITY_ID=…. Подмените его на ваш код: ENTITY_ID=MY_MODULE_CUSTOM_ENTITY и нажмите Enter.
  4. Теперь вы создаете поле для своей сущности! Создайте, например, поле UF_COMMENT.

Альтернатива: Создайте поле программно через CUserTypeEntity, указав ‘ENTITY_ID’ => ‘MY_MODULE_CUSTOM_ENTITY’.

Шаг 3: Использование в коде

Теперь D7 ORM автоматически «подхватит» эти поля.

// Добавление записи с UF-полем
MyCustomTable::add([
    'NAME' => 'Тест',
    'UF_COMMENT' => 'Это работает!'
]);

// Выборка
$result = MyCustomTable::getList([
    'select' => ['ID', 'NAME', 'UF_COMMENT'] // Поле доступно в select!
]);

Отображение в админке

Чтобы вывести эти поля в стандартной форме редактирования (CAdminForm), используйте CUserTypeManager.

// В файле редактирования edit.php
global $USER_FIELD_MANAGER;
$USER_FIELD_MANAGER->EditFormShowTab('MY_MODULE_CUSTOM_ENTITY', $arResult['ID']);

Вывод:
Метод getUfId() превращает вашу обычную таблицу в расширяемую сущность.

Это позволяет использовать мощь системных типов данных (Файл, Привязка к элементам, Видео) в ваших собственных разработках.

пользовательские поля для своих таблиц, getUfId, CUserTypeManager, свои UF поля, ORM UF, расширение таблиц.

Мой рейтинг:

Добавить комментарий

Related Post

Программное создание пользовательских полей (UF): CUserTypeEntity и CUserFieldEnumПрограммное создание пользовательских полей (UF): CUserTypeEntity и CUserFieldEnum

Средний рейтинг Еще нет оценок Создавать пользовательские поля («кликая» в админке) удобно только на этапе прототипирования. Когда проект переходит в стадию поддержки и деплоя, все изменения структуры БД должны выполняться

Обновление свойств элемента инфоблока 1с BitrixОбновление свойств элемента инфоблока 1с Bitrix

Средний рейтинг Еще нет оценок SetPropertyValuesEx() — это метод для сохранения значений свойств элемента информационного блока в БД. Этот метод более экономен в количестве запросов к БД, чем SetPropertyValues(), потому

Сила связей в D7 ORM: JOIN’ы и ReferenceField на практикеСила связей в D7 ORM: JOIN’ы и ReferenceField на практике

Средний рейтинг Еще нет оценок Мы уже умеем выбирать данные из одной таблицы с помощью getList. Но настоящая мощь ORM проявляется, когда нужно в одном запросе получить связанные данные из нескольких