Свои типы свойств и пользовательских полей
Пользовательские типы свойств инфоблока создаются через обработчик события OnIBlockPropertyBuildList с возвратом массива коллбэков отрисовки и валидации. Метод ConvertToDB является ключевой точкой нормализации и проверки формата данных перед записью в базу при обмене с внешними системами или вызове API.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Класс пользовательского типа свойства
-
2
Отображение в админке и в публичке
-
3
Валидация и хранение значения
-
4
Свой тип пользовательского поля
Материалы
Официальная документация
Материалы BXMax
Проверь себя
Свой тип свойства работает в форме элемента, но при импорте из 1С в поле приходит мусор. Где искать?
В обработчиках ConvertToDB и ConvertFromDB. Форма проходит через GetPropertyFieldHtml и CheckFields, а импорт пишет значение напрямую, и единственная точка, где тип может нормализовать данные — ConvertToDB. Если его нет, в базу уходит то, что прислали.
Заказчик сменил USER_TYPE у свойства, которое участвует в умном фильтре, и фильтр опустел. Почему?
Тип определяет способ хранения значения в фасетном индексе — число, строка, словарь. При смене типа с другим хранением PropertyIndex Manager::onPropertyUpdate() помечает индекс инфоблока невалидным, и его нужно пересоздать.
Чем регистрация типа свойства инфоблока отличается от регистрации типа пользовательского поля?
Разные события и разные контракты. Свойство инфоблока — обработчик OnIBlockPropertyBuildList, возвращающий массив с USER_TYPE и коллбэками. UF-поле — класс-наследник BaseType, событие OnUserTypeBuildList и компонент отрисовки main.field.* через константу RENDER_COMPONENT.
Почему тип свойства чаще регистрируют в init.php, и что с этим не так?
Событие OnIBlockPropertyBuildList должно быть зарегистрировано до первого обращения к свойствам на хите, и init.php это гарантирует. Но класс типа при этом живёт вне модуля, без автозагрузки и версии; правильнее регистрировать обработчик установщиком своего модуля через EventManager.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить