Пользовательские поля на практике - типы, вывод, ошибки
Пользовательские поля - подтема на 31 вопрос из собранных. Здесь собраны решения по работе с ними из кода.
Что общего у этих задач
Поле крепится к сущности, а не к инфоблоку. Пользователь, раздел, заказ, файл в медиабиблиотеке - у каждого свой набор полей, и заводятся они в разных местах интерфейса. Отсюда постоянная путаница: «завёл поле, а его нет в форме» обычно означает, что оно заведено у другой сущности.
Хранятся значения в своей таблице на сущность. Поэтому фильтровать по полю можно, а сортировать - не всегда, и выборка по нескольким полям строится присоединением, а не простым условием.
Имя поля начинается с UF_ не для красоты. Префикс отличает пользовательские
поля от штатных на всех уровнях: в формах, в выборках, в API. Поле без префикса
завести нельзя, а с чужим префиксом - можно, и потом оно нигде не находится.
Свои поля не бесплатны для выборок. Каждое присоединение стоит времени, и десяток полей в списке из тысячи записей заметен в замерах скорости страницы.
С чего начать
Начинают с выбора сущности: кому именно принадлежит новое поле - пользователю, разделу, заказу или своей таблице. Половина вопросов «поле не появилось» решается именно здесь.
Дальше задают код поля и его тип, помня, что тип потом почти не меняется. Множественность и обязательность тоже определяют сразу: переделывать их на живых данных дорого.
Последним проверяют вывод и выборку. Значение должно читаться и в административной части, и на витрине, и в выгрузке, иначе поле окажется украшением карточки.
Решения подтемы
- Пользовательское поле: заведение, вывод, типы - к чему крепится, как прочитать значение, почему поле не видно.
- Поля разделов и пользователей - выборка, файлы, сортировка списков.
- Свой тип пользовательского поля - обработчик, класс типа, разметка и проверка.
- Пользовательское поле не работает: разбор причин - префикс кода, смена типа, варианты списка, выборка ORM.
- Пользовательские поля у своей сущности - свой код сущности, регистрация, запись и чтение значений.
- Пользовательское поле изнутри: описание, значение, вывод - справочник описаний, таблицы значений, множественность, варианты списка.
Частые вопросы
Чем пользовательское поле отличается от свойства инфоблока?
Свойство принадлежит инфоблоку и живёт только у его элементов. Пользовательское поле крепится к сущности платформы: пользователю, разделу, заказу. Механизмы разные, и API у них разное.
Почему заведённое поле не появилось в форме?
Чаще всего оно заведено у другой сущности либо у него снят показ в форме. Проверяют, к какой сущности поле привязано, и её ли форму открывают.
Можно ли отсортировать выборку по полю UF?
Не всегда: значения лежат в отдельной таблице, и сортировка по ним требует присоединения. Множественные поля не сортируются в принципе - у одной записи их несколько.
Почему в поле знаки вопроса вместо русского текста?
Разошлась кодировка соединения с базой и кодировка таблицы значений. Это не свойство самого поля: так же будут выглядеть и другие данные из той же таблицы.
Связанные темы
- Пользовательские поля - устройство механизма целиком
- Свойства инфоблоков - другой механизм для элементов
- Highload-блоки - куда выносить большие справочники
- Выборки из инфоблоков - выборка и фильтрация из кода
- Раздел Инфоблоки и данные