Middle Инфоблоки: D7 и продвинутое Рекомендуется

Свои типы свойств и пользовательских полей

Пользовательские типы свойств инфоблока создаются через обработчик события OnIBlockPropertyBuildList с возвратом массива коллбэков отрисовки и валидации. Метод ConvertToDB является ключевой точкой нормализации и проверки формата данных перед записью в базу при обмене с внешними системами или вызове API.

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    Класс пользовательского типа свойства
  • 2
    Отображение в админке и в публичке
  • 3
    Валидация и хранение значения
  • 4
    Свой тип пользовательского поля

Материалы

Проверь себя

Свой тип свойства работает в форме элемента, но при импорте из 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: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти