Мы привыкли, что пользовательские поля можно добавлять к разделам, пользователям или 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: Добавление полей в админке
- Перейдите в Настройки -> Настройки продукта -> Пользовательские поля.
- Нажмите «Добавить поле».
- В URL браузера вы увидите параметр ENTITY_ID=…. Подмените его на ваш код: ENTITY_ID=MY_MODULE_CUSTOM_ENTITY и нажмите Enter.
- Теперь вы создаете поле для своей сущности! Создайте, например, поле 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, расширение таблиц.