Добавление кастомного типа пользовательского св-ва Битрикс

Зачем нужны кастомные типы пользовательских свойств

В 1С-Битрикс пользовательские свойства (UF-поля) — это мощный инструмент для расширения сущностей: пользователей, элементов инфоблоков, заказов и других объектов. Стандартный набор типов включает строку, число, список, файл, дату и несколько других. Но практика показывает, что этого часто недостаточно.

Например, вам может потребоваться поле «Название и описание» — составное поле, хранящее два значения в одном свойстве. Или поле с цветовым выбором, поле с координатами на карте, поле с JSON-структурой. Для таких случаев Битрикс предоставляет механизм регистрации кастомных типов пользовательских свойств через событие OnIBlockPropertyBuildList.

Структура класса кастомного типа свойства

Кастомный тип свойства реализуется как PHP-класс со статическими методами. Минимально необходимые методы:

  • GetUserTypeDescription() — описание типа: идентификатор, название, привязка методов.
  • GetPropertyFieldHtml() — HTML для редактирования значения в административной панели.
  • ConvertToDB() — сериализация значения перед записью в базу данных.
  • ConvertFromDB() — десериализация значения при чтении из базы данных.
  • GetPublicViewHTML() — отображение значения на публичной части сайта.

Дополнительно можно реализовать методы для фильтрации, вывода в списке элементов, настроек свойства и т.д.

Регистрация типа в системе

Тип регистрируется через подписку на событие OnIBlockPropertyBuildList. Это событие собирает все доступные типы свойств при каждом обращении к списку типов в системе.

Метод GetUserTypeDescription() должен возвращать массив с описанием типа, где USER_TYPE — уникальный строковый идентификатор вашего типа, PROPERTY_TYPE — базовый тип хранения в БД (S для строки, N для числа, F для файла).

Полный пример класса: составное свойство «Название и значение»

Ниже — полный рабочий код класса для кастомного типа свойства, хранящего пару «название + описание» в одном поле:

Разбор методов класса

GetPropertyFieldHtml — генерирует HTML-форму для редактирования свойства в административной панели. Параметр $strHTMLControlName["VALUE"] содержит имя поля формы, которое Битрикс использует для сбора значений. Важно формировать имена полей как массив: name="fieldname[title]" и name="fieldname[description]".

ConvertToDB — преобразует значение перед сохранением. В данном примере массив сериализуется функцией serialize(). Метод также отвечает за валидацию: если оба поля пусты, возвращается null.

ConvertFromDB — обратная операция: десериализует строку из базы данных обратно в массив при чтении.

GetPublicViewHTML — отвечает за вывод значения на публичной части. Если данных нет, возвращает null.

Подключение файла класса

Файл с классом и регистрацией события размещается в:

Либо выносится в отдельный файл и подключается из init.php:

Второй подход предпочтителен для крупных проектов: каждый кастомный тип свойства хранится в отдельном файле, что упрощает поддержку кода.

Тестирование: как проверить что тип появился

После добавления кода в init.php выполните следующие шаги:

  • Перейдите в административную панель: Контент → Инфоблоки → Типы инфоблоков, выберите любой инфоблок и откройте раздел Свойства.
  • Нажмите «Добавить свойство» и в поле Тип найдите «Название и значение» (или то описание, которое вы указали в DESCRIPTION).
  • Если тип отображается в списке — регистрация прошла успешно.
  • Создайте свойство данного типа, добавьте элемент инфоблока и заполните поля — убедитесь, что данные сохраняются и отображаются корректно.
  • Если тип не появляется, проверьте наличие синтаксических ошибок в PHP-файле командой: php -l /local/php_interface/init.php.