Битрикс предоставляет много типов полей (строка, список, файл), но иногда нужно что-то особенное: например, поле для выбора точки на Яндекс.Карте, привязка к конкретной внешней сущности или поле «Цвет» с палитрой.
Для этого можно создать свой тип UF.
Шаг 1: Класс обработчика поля
В D7 рекомендуется наследовать класс от \Bitrix\Main\UserField\Types\BaseType.
Создадим класс MyColorType в папке модуля или в local/php_interface.
namespace My\Module\UserField;
use Bitrix\Main\UserField\Types\BaseType;
class MyColorType extends BaseType
{
public const USER_TYPE_ID = 'my_color_picker';
// Описание поля для системы
public static function getDescription(): array
{
return [
'USER_TYPE_ID' => self::USER_TYPE_ID,
'CLASS_NAME' => __CLASS__,
'DESCRIPTION' => 'Выбор цвета (HTML5)',
'BASE_TYPE' => \CUserTypeManager::BASE_TYPE_STRING,
];
}
// Тип колонки в БД
public static function getDbColumnType(): string
{
return 'varchar(7)'; // Например, #FF0000
}
// HTML для формы редактирования (в админке)
public static function getEditFormHTML(array $userField, ?array $htmlControl): string
{
$fieldName = $htmlControl['NAME'];
$value = htmlspecialcharsbx($htmlControl['VALUE']);
return '<input type="color" name="'.$fieldName.'" value="'.$value.'">';
}
// HTML для списка (в админке)
public static function getAdminListViewHTML(array $userField, ?array $htmlControl): string
{
$value = htmlspecialcharsbx($htmlControl['VALUE']);
if(!$value) return '';
return '<div style="width:20px;height:20px;background-color:'.$value.';border:1px solid #000;"></div>';
}
// Метод для сохранения в БД (опционально, если нужна обработка)
public static function onBeforeSave($userField, $value)
{
return $value;
}
}Шаг 2: Регистрация обработчика
Нужно подписаться на событие OnUserTypeBuildList модуля main.
В init.php:
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'main',
'OnUserTypeBuildList',
['\My\Module\UserField\MyColorType', 'getDescription']
);Результат
Теперь при создании Пользовательского поля в админке (для пользователей, разделов или HL-блоков) в выпадающем списке «Тип данных» появится ваш вариант: «Выбор цвета (HTML5)». При редактировании элемента вы увидите нативный Color Picker браузера.
Что еще можно реализовать:
- getSettingsHTML: Добавить настройки поля (например, «Цвет по умолчанию»).
- getFilterHTML: Кастомный фильтр для списков.
- checkFields: Валидация значения перед сохранением.
Вывод:
Собственные типы полей позволяют создавать удобные интерфейсы ввода данных для контент-менеджеров, инкапсулируя сложную логику отображения и сохранения внутри одного класса.
свой тип поля битрикс, UserType, OnUserTypeBuildList, BaseType, кастомное поле, пользовательское поле D7.