Блог Горошко Андрея 1C-Битрикс Создание своего типа Пользовательского поля (UserType) в Битрикс D7

Создание своего типа Пользовательского поля (UserType) в Битрикс D7

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

Битрикс предоставляет много типов полей (строка, список, файл), но иногда нужно что-то особенное: например, поле для выбора точки на Яндекс.Карте, привязка к конкретной внешней сущности или поле «Цвет» с палитрой.

Для этого можно создать свой тип 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.

Мой рейтинг:

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

Related Post

Сложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условийСложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условий

Средний рейтинг Еще нет оценок Простой массив в параметре filter метода getList() отлично подходит для условий, объединенных по логике «И» (AND). Но что делать, если нужна более сложная логика, например, (A AND B) OR C?

Продажа маркированных товаров онлайн битриксПродажа маркированных товаров онлайн битрикс

Средний рейтинг Еще нет оценок Если вы используете эквайринг Сбербанка для оплаты онлайн на сайте 1С-Битрикс Управление сайтом и желаете продавать маркированные товары, то: У меня есть опыт реализации подобных

Система событий в Битрикс: AddEventHandler и современный EventManager из D7Система событий в Битрикс: AddEventHandler и современный EventManager из D7

Средний рейтинг Еще нет оценок Система событий — один из самых мощных механизмов в 1С-Битрикс. Она позволяет «вклиниваться» в стандартные процессы (например, перед добавлением товара в корзину или после обновления