Инфоблоки — основа большинства сайтов на 1С-Битрикс. Здесь хранятся новости, услуги, статьи, акции, вакансии и справочники. Но чем сложнее проект, тем больше свойств, разделов и связей появляется в инфоблоках. Админка обрастает десятками полей, разработка замедляется, редакторы путаются в настройках.
В этой статье разберем главную проблему инфоблоков — множественные однотипные данные — и покажем решение без лишнего кода.
Проблема: когда одно свойство — не одно свойство
Стандартные свойства инфоблока работают по простому принципу: одно поле — одно значение. Для большинства задач этого достаточно. Но что делать, когда у одного элемента десятки связанных данных?
Типичный пример: этапы работы над заказом
На странице услуги «Ремонт квартир» нужно вывести пошаговый процесс:
-
Заявка — консультация — выезд замерщика — смета — подписание договора — закупка материалов — черновые работы — чистовая отделка — сдача объекта.
У каждого этапа — название, описание, срок выполнения, иконка, ответственный.
Количество этапов фиксированное — 9. Но здесь есть нюанс: этапы уникальны для каждой услуги.
У услуги «Ремонт квартир» — одни этапы. У услуги «Дизайн-проект» — совсем другие. У услуги «Бюджетный ремонт» — этапов меньше, и они другие.
Создавать отдельный инфоблок «Этапы» и привязывать его к услуге? Можно. Но:
-
Редактору нужно создавать элементы в одном инфоблоке, потом привязывать их в другом.
-
Для каждой услуги — свой набор этапов. Их нельзя переиспользовать.
-
Нужно сортировать этапы в определенном порядке. В стандартной привязке сортировка хранится отдельно.
-
Если этапов 10 и у каждой услуги они свои — получается сотни элементов в инфоблоке «Этапы», большинство из которых используются ровно один раз.
Другой пример: пакеты услуг
Услуга «Ремонт квартир» имеет пакеты:
| Пакет | Цена | Срок | Включено |
|---|---|---|---|
| Эконом | 10 000 ₽/м² | 30 дней | Черновая отделка, электрика, сантехника |
| Стандарт | 15 000 ₽/м² | 45 дней | + Дизайн-проект, выравнивание стен |
| Комфорт | 22 000 ₽/м² | 60 дней | + Звукоизоляция, теплый пол, натяжные потолки |
| VIP | 35 000 ₽/м² | 75 дней | + Авторский надзор, премиум-материалы |
Пакетов всегда ровно 4. У каждого пакета — цена, срок, список работ. Это идеальный случай для множественных данных: структура известна, количество записей фиксировано, но каждая запись содержит 3–4 поля.
Создавать отдельный инфоблок «Пакеты»? Это избыточно: пакеты существуют только в контексте конкретной услуги, их нельзя переиспользовать, и их всегда ровно 4.
Альтернатива — создать 4 набора свойств:
ПАКЕТ_1_ЦЕНА, ПАКЕТ_1_СРОК, ПАКЕТ_1_СПИСОК
ПАКЕТ_2_ЦЕНА, ПАКЕТ_2_СРОК, ПАКЕТ_2_СПИСОК
ПАКЕТ_3_ЦЕНА, ПАКЕТ_3_СРОК, ПАКЕТ_3_СПИСОК
ПАКЕТ_4_ЦЕНА, ПАКЕТ_4_СРОК, ПАКЕТ_4_СПИСОК
Итого: 12 свойств вместо одного. А если появится пятый пакет? Придется создавать еще 3 свойства.
Корень проблемы: множественные однотипные данные
Проблема множественных данных возникает не тогда, когда данные можно вынести в отдельный инфоблок. А тогда, когда:
-
Данные существуют только в контексте родительского элемента и не переиспользуются (пакеты услуг, этапы работы).
-
Количество записей фиксировано или меняется редко, но каждая запись содержит несколько полей (пакеты, характеристики).
-
Вынесение в отдельный инфоблок создает избыточную сложность — редактору нужно работать в двух местах, а разработчику — писать лишний код для выборки и сортировки.
Комбинированное множественное свойство решает эти случаи элегантно: одна структура, одно поле, удобный интерфейс, минимум кода.
Какие есть способы решения?
Способ 1: Отдельный инфоблок и привязка
Создаем отдельный инфоблок, например, «Занятия». В элементе «Фитнес-клуб» добавляем множественную привязку к занятиям.
Плюсы:
-
Чистая структура.
-
Данными можно управлять централизованно.
Минусы:
-
Редактору нужно переключаться между инфоблоками.
-
Нельзя добавить занятие прямо на странице «Фитнес-клуб».
-
Теряется контекст: редактор видит список занятий без связи с конкретным клубом.
-
Сложно выводить данные, если нужны поля, зависящие от контекста.
Способ 2: Множественные свойства
Создаем свойство типа «Строка» с множественным значением для названий занятий. Отдельно — множественное свойство для времени, отдельно — для инструкторов.
Плюсы:
-
Просто технически.
Минусы:
-
Данные не группируются: непонятно, какой инструктор к какому занятию относится.
-
Нельзя добавить к каждому занятию уникальные поля.
Способ 3: Десятки отдельных свойств
Создаем свойства для каждого занятия по отдельности.
Плюсы:
-
Все данные структурированы.
Минусы:
-
Админка превращается в простыню.
-
Нельзя динамически добавлять новые занятия.
-
Сложная выборка и вывод на сайте.
Оптимальное решение: комбинированные множественные свойства
Стандартный Битрикс не умеет группировать множественные данные в одном поле. Чтобы решить эту задачу, мы разработали модуль «Универсальное комбинированное свойство» для 1С-Битрикс.
Модуль добавляет новый тип свойства, который объединяет возможности множественности и составной структуры. Внутри одного поля создается структура из подполей любого типа, а множественность позволяет добавлять неограниченное количество записей.
Как это выглядит на практике
Пример 1. Пакеты услуг
У услуги «Ремонт квартир» есть четыре пакета: «Эконом», «Стандарт», «Комфорт», «VIP». У каждого пакета — цена, срок выполнения и список работ. Количество пакетов фиксированное, но набор полей у каждого одинаковый.
В одном свойстве «Пакеты» настраиваются подполя:
-
Название пакета (строка)
-
Цена (число)
-
Срок выполнения (число)
-
Список работ (текст)
Редактор видит это как таблицу из четырех строк. В каждой строке — свой пакет со всеми полями. Одно свойство вместо 12 отдельных полей.
Добавился новый пакет «Премиум»? Редактор просто добавляет строку. Не нужно создавать новые свойства в инфоблоке.
Пример 2. Этапы работы
У каждой услуги свой набор этапов. У «Ремонта квартир» — 9 этапов, у «Дизайн-проекта» — 5, у «Бюджетного ремонта» — 6. У каждого этапа — название, описание, иконка, срок.
Создавать отдельный инфоблок «Этапы» с привязкой к услуге? Можно, но это избыточно: этапы уникальны для каждой услуги, не переиспользуются, и их нужно сортировать в определенном порядке.
В одном свойстве «Этапы работы» настраиваются подполя:
-
Название этапа (строка)
-
Описание (текст)
-
Иконка (файл)
-
Срок выполнения (число)
Редактор видит список этапов. У каждой услуги — свой список, своя последовательность. Менять порядок можно перетаскиванием строк. Одно свойство вместо 4×9 = 36 полей.
А если у услуги «Дизайн-проект» этапов не 9, а 5 — редактор просто не добавляет лишние строки. Инфоблок при этом общий, свойства не дублируются.
Общий принцип. В одном свойстве вы настраиваете структуру из подполей. Редактор видит это как таблицу или список. Добавляет столько записей, сколько нужно. Все данные хранятся в формате JSON.
Что дает модуль
-
Одно свойство вместо десятков. Вместо 36 полей для этапов работы — одно поле. Вместо 12 полей для пакетов — одно поле.
-
Редактору не нужно переключаться. Все данные редактируются прямо на странице элемента. Добавление и удаление записей — как строки в таблице.
-
Гибкость. Количество записей не ограничено. Добавился новый пакет или этап? Редактор просто добавляет строку. Меняются этапы для конкретной услуги? Редактор редактирует только её строки.
-
Производительность. Одно свойство вместо десятков. Меньше запросов к базе — быстрее работает сайт.
-
Готовый вывод на сайте. Модуль отдает данные в структурированном виде — вы проходите по массиву записей в цикле.
Доступные типы подполей
Для элементов инфоблока доступны 10 типов подполей:
| Тип | Назначение |
|---|---|
| Строка | Короткий текст |
| Число | Числовые значения |
| Текст | Многострочный текст |
| Файл | Загрузка файла или изображения |
| Дата | Дата с календарем |
| Привязка к элементу | Связь с элементом другого инфоблока |
| Привязка к разделу | Связь с разделом инфоблока |
| Список | Выпадающий список с настраиваемыми вариантами |
| Цвет | Выбор цвета |
| Яндекс.Карта | Координаты и адрес на карте |
Внутри одного свойства можно хранить текст, числа, файлы, даты, ссылки на другие элементы, цвета и географические координаты.
Работа с разделами инфоблока
Проблема множественных данных касается не только элементов, но и разделов. Стандартно у разделов инфоблока есть только базовые поля: название, код, описание, картинка. Но часто нужно хранить дополнительную информацию.
Модуль поддерживает создание комбинированных полей для разделов через стандартный механизм пользовательских полей (UF). В интерфейсе появляется новый тип UF — «Комбинированное свойство (для разделов)».
Для разделов доступны 8 типов подполей (все, кроме файла и Яндекс.Карты): строка, число, текст, дата, привязка к элементу, привязка к разделу, список, цвет.
Пример: каталог услуг с разделами. Для каждого раздела нужно добавить контакты менеджера, баннер, дополнительный текст. Вместо нескольких UF-полей — одно комбинированное.
Другие способы упростить инфоблоки
1. Инфоблоки 2.0
Технология позволяет хранить все значения свойств одного элемента в одной строке таблицы. Это ускоряет выборку и уменьшает количество запросов к базе.
Включение: в настройках инфоблока на вкладке «Дополнительно» установите флажок «Инфоблоки 2.0» (в новых версиях включено по умолчанию).
2. Правильная настройка привязок
Свойства-привязки — мощный инструмент, но они создают нагрузку. Если требуется просто сослаться на другой элемент, храните его символьный код в строковом свойстве. Это быстрее и проще, особенно при больших объемах данных.
3. Оптимальное количество инфоблоков
Если элементы имеют одинаковый набор свойств — храните их в одном инфоблоке. Разделяйте только тогда, когда наборы полей принципиально разные или количество записей превышает десятки тысяч.
4. Настройка прав доступа
Расширенный режим прав позволяет гибко разграничивать доступ к разделам и элементам. Редакторы видят только то, с чем им нужно работать.
Резюме
Главная боль при работе с инфоблоками — множественные однотипные данные. Стандартные свойства не умеют их группировать, что приводит к созданию десятков полей, путанице в админке и снижению производительности.
Модуль «Универсальное комбинированное свойство» для 1С-Битрикс решает эту проблему. Он добавляет тип свойства, которого нет в стандартной поставке:
-
Одно свойство вместо десятков. Чистая структура инфоблока и админки.
-
Удобный интерфейс для редакторов. Все данные на одной странице, добавление и удаление записей — как строки в таблице.
-
Гибкость. Количество записей не ограничено, структуру можно менять без пересоздания свойств.
-
Производительность. Меньше свойств — меньше запросов к базе.
-
Поддержка всех нужных типов данных: строка, число, текст, файл, дата, привязки, список, цвет, Яндекс.Карта.
-
Работа как с элементами, так и с разделами инфоблока.
Где применяется:
-
Пакеты услуг и тарифы
-
Этапы работ
-
Часто задаваемые вопросы (FAQ)
-
Документы для скачивания
-
Акции и спецпредложения
-
Филиалы и контакты
Установите модуль через Маркетплейс, создайте свойство типа «Универсальное комбинированное свойство», настройте структуру подполей — и ваш инфоблок станет чище, а работа с контентом — быстрее и удобнее.