Свойства инфоблоков - типы, множественность, выборка
Свойства - крупнейшая подтема инфоблоков: 320 вопросов из собранных. Здесь собраны решения по ним.
Что общего у этих задач
Значения свойств лежат не в таблице элементов. У инфоблока их два способа хранения: общая таблица значений и отдельная таблица на инфоблок. Способ выбран при создании инфоблока и меняет и производительность, и вид запросов, а извне это почти не заметно, пока не понадобится фильтр.
Тип свойства задаётся один раз. Перевести список в привязку или строку в число штатно нельзя: значения хранятся по-разному. Смена типа означает создание нового свойства и перенос значений своим кодом.
Множественность - это отдельный флаг, а не следствие типа. У одиночного свойства запись нового значения затирает прежнее без ошибки, и потеря данных обнаруживается позже, когда искать причину уже негде.
Решения подтемы
-
Свойства инфоблока: чтение, запись, фильтрация - как выбрать по свойству, записать множественное, поменять код.
-
Хранение свойств инфоблока: две версии, скорость, выбор режима - общая таблица против собственных, дубли строк, переключение.
-
Множественные свойства: вывод файлов, фильтр, удаление значений - набор значений, картинки, отрицание в фильтре.
-
Свойства-списки: значения, сортировка, значение по умолчанию - справочник значений, порядок, фильтрация по идентификатору.
-
Свойства-привязки: элемент, раздел и обратная выборка - идентификаторы вместо названий, фильтр, разделы по свойству.
-
Дата, число и HTML в свойствах: хранение, вывод, фильтр - формат даты, строковая сортировка чисел, текст с разметкой.
-
Фильтрация разделов по свойству элементов: список без пустых - разделы по элементам, родители и поле-агрегат.
-
Свой тип свойства инфоблока: регистрация, форма, хранение - регистрация обработчиком, базовый тип, форма и проверка.
-
Значение свойства не сохраняется: разбор причин - вариант списка, обнуление, регистр кода, привязка, файлы.
-
Свойство не выводится в шаблоне: разбор причин - параметры компонента, ключ в шаблоне, кэш, пустое значение.
Частые вопросы
Можно ли изменить код свойства после создания?
Да, код меняется без потери значений: он лишь идентификатор для кода и шаблонов. Менять нельзя тип и способ хранения - вот они завязаны на формат данных в таблице.
Почему фильтр по свойству ничего не находит?
Фильтр по свойству пишется как PROPERTY_КОД с кодом в верхнем регистре, а для списков сравнивается идентификатор значения, а не его название. Обе ошибки дают пустую выборку без предупреждения.
Как хранить значение с единицей измерения?
Двумя свойствами: числом и списком единиц. Строка со смешанным содержимым не фильтруется и не сортируется, а разделять её потом дороже, чем завести второе свойство сразу.
Что быстрее: общая таблица значений или отдельная?
Отдельная таблица быстрее на выборках с фильтром по нескольким свойствам, потому что значения лежат колонками. Общая универсальнее и не требует перестроения при добавлении свойства.
Связанные темы
- Инфоблоки - устройство инфоблоков целиком
- Highload-блоки - куда выносить большие справочники
- Пользовательские поля - свойства у других сущностей
- Выборки из инфоблоков - как значения свойств попадают в выборку
- Раздел Инфоблоки и данные