ФиксИнтернет-магазин на 1С-Битрикс под ключ за 30 дней по фиксированной цене

Инфоблоки Битрикс: как правильно проектировать структуру данных, чтобы не переделывать через полгода

Проектирование структуры инфоблоков в 1С-Битрикс: разделы, свойства и связи между инфоблоками

Через полгода после запуска почти любой проект на 1С-Битрикс начинает расти не так, как задумывалось на старте: к «Новостям» добавляется «Блог», к «Портфолио» — «Кейсы» со своей структурой полей, к одному инфоблоку «Каталог» пристраивают костыль под акции. Если структура инфоблоков изначально не была спроектирована с запасом, каждое такое расширение превращается в мини-переделку: миграцию данных, правку шаблонов, перенастройку прав. Хуже всего — эти переделки почти всегда обнаруживаются в разгар работы, когда откладывать уже нельзя.

Ниже — методология проектирования структуры инфоблоков на старте проекта: как описать типы контента до того, как в админке появится первый раздел, как выбирать типы свойств осознанно, а не «на глазок», и как избежать главной ловушки — инфоблока, который делает всё и потому не делает ничего хорошо. Это относится к любому типу контента — не только к каталогу товаров, но и к новостям, портфолио, вакансиям и филиалам. Разбор опирается на нашу практику разработки каталогов товаров на 1С-Битрикс, где цена ошибки в структуре данных особенно высока.

Коротко

  • Проектируйте структуру от типов контента и их жизненного цикла, а не копированием пунктов меню сайта.
  • Один инфоблок — один тип контента со своей логикой публикации; инфоблок «на всё» — типичный антипаттерн, который перестаёт масштабироваться.
  • Тип свойства выбирайте осознанно: «Список» и привязки экономнее и предсказуемее «Строки» для всего, что фильтруется или структурируется.
  • Связи между инфоблоками (привязка к элементам/разделам) избавляют от дублирования одних и тех же данных в разных местах.
  • Соглашение о наименовании кодов и полей стоит зафиксировать один раз в начале — это дешевле, чем разбираться в PROP_17 через год.

Почему структуру нельзя проектировать «на ходу»

Соблазн начать разработку сразу с админки — завести инфоблок «Новости», добавить пару свойств, посмотреть, как выглядит на фронте, — понятен: так быстрее увидеть результат. Проблема в том, что решения, принятые «по ходу дела», почти всегда учитывают только сегодняшний список требований и ничего не говорят о том, как контент будет расти через полгода-год. Свойство, заведённое как «Строка» для трёх текущих брендов, при росте до полусотни превращается в двадцать вариантов написания одного и того же бренда; раздел меню, скопированный «в лоб» в дерево разделов инфоблока, оказывается неудобной основой для фильтрации, когда появляется вторая ось классификации.

Переделка структуры на живом проекте всегда дороже, чем правильное проектирование на старте: нужно не просто поменять настройку, а перенести уже накопленные данные, поправить все места в шаблонах и коде, которые обращаются к старой структуре, и — если сайт уже проиндексирован — не потерять положение в поиске при возможной смене URL. Час, потраченный на проектирование до старта разработки, почти всегда экономит недели на этапе роста.

Важно: эта статья — про подход к проектированию для любого типа контента (новости, портфолио, вакансии, филиалы, сам каталог). Если нужен более узкий технический разбор именно для каталога товаров — версии инфоблоков 1.0/2.0 и порог перехода на highload-блоки — см. отдельный материал «Инфоблоки 1.0 и 2.0: когда переходить на highload-блоки».

Из чего состоит инфоблок

Прежде чем проектировать структуру, полезно чётко разложить по полочкам, из чего инфоблок собран технически — это определяет, какие решения вообще доступны на этапе проектирования.

Проектирование структуры — это последовательный выбор для каждого из этих четырёх уровней: сколько нужно инфоблоков и типов, как устроено дерево разделов, какие элементы в нём будут жить и какими свойствами описываться. Пропуск любого из уровней на этапе планирования — источник будущих переделок.

Инфоблок «Портфолио» Раздел: «Интернет-магазины» Раздел: «Корпоративные сайты» Элемент: кейс А Элемент: кейс Б Свойства: отрасль, бюджет, срок, фото
Схема: инфоблок → разделы → элементы → свойства элементов — четыре уровня, каждый требует собственного проектного решения.

Шаг 1: описываем типы контента, а не копируем меню

Частая методическая ошибка — открыть карту сайта и один в один превратить пункты меню в инфоблоки: есть пункт «Новости» — заводим инфоблок «Новости», есть «Акции» — заводим инфоблок «Акции». Меню сайта — это навигация для посетителя, она может меняться от редизайна к редизайну, и она ничего не говорит о том, какие данные на самом деле нужно хранить и как они связаны между собой.

Правильная отправная точка — описать типы контента как самостоятельные сущности, независимо от того, как они будут называться в меню. Для каждого типа контента стоит явно зафиксировать: какие у него уникальные атрибуты, кто его создаёт и модерирует, как часто он публикуется, есть ли у него версионность и нужны ли отдельные права доступа. Например, «Акции» и «Новости» на первый взгляд похожи (заголовок, текст, дата, фото), но у акций обычно есть дата начала/окончания действия и, возможно, привязка к конкретным товарам — а значит, это разные сущности с разным набором свойств, даже если из меню они выглядят как соседние пункты одного типа.

Соглашение о наименованиях с первого дня

Небольшая, но недооценённая часть проектирования — договориться о правилах наименования кодов инфоблоков, разделов и свойств прежде, чем в админке появится первая сущность. Без явного соглашения команда, которая растёт со временем, неизбежно приходит к разнобою: одно свойство называется BRAND, другое — MANUFACTURER, хотя оба хранят производителя; в одном инфоблоке символьный код на латинице, в другом — транслит с цифрами.

Что называемПравилоПример
Символьный код инфоблокаЛатиница, snake_case, по смыслуnews, portfolio, branches
Код свойстваЛатиница, UPPER_SNAKE_CASE, без сокращений «на свой вкус»MANUFACTURER, а не MANUF
Человекочитаемое названиеПо-русски, единообразно во всех инфоблоках«Бренд» — везде «Бренд», не «Производитель» в одном месте
Символьный код разделаЛатиница, транслит без произвольных сокращенийinternet-magaziny, не im

Зафиксируйте эти правила одной страницей в проектной документации до начала работы в админке — это разовая инвестиция, которая экономит часы разбора «а что такое PROP_17» на каждом следующем этапе проекта, включая работу новых разработчиков, которые подключатся позже.

Проектирование дерева разделов

Дерево разделов — это не просто способ разложить элементы по папкам, а инструмент классификации, от которого зависят фильтрация, навигация и SEO-структура URL. При проектировании стоит заранее ответить на несколько вопросов: нужна ли многоуровневая иерархия или достаточно одного уровня; будет ли элемент относиться только к одному разделу или к нескольким одновременно (в 1С-Битрикс это отдельная настройка — множественная привязка к разделам); как глубоко нужно уходить в детализацию, чтобы не получить либо пустые «разделы ради разделов», либо, наоборот, один гигантский раздел с тысячами элементов без внутренней структуры.

Отдельно стоит спроектировать, что будет осью классификации, если у контента потенциально есть несколько независимых измерений — например, у портфолио это может быть и отрасль клиента, и тип решения (интернет-магазин, корпоративный сайт, B2B-портал). Если оба измерения нужны одновременно, дерево разделов справляется только с одним из них — второе измерение лучше вывести отдельным свойством типа «список», а не пытаться смоделировать двумя пересекающимися деревьями разделов.

Осознанный выбор типов свойств

Выбор типа свойства — решение с долгими последствиями: свойство типа «Строка» легко завести, но плохо фильтруется, плохо нормализуется и почти всегда превращается в разнобой написаний («Москва», «москва», «г. Москва») при накоплении данных. Ориентируйтесь на таблицу ниже при выборе типа для каждого нового свойства.

Тип свойстваКогда использоватьРиск при неверном выборе
СписокКонечный набор значений: статус, категория, брендСтрока вместо списка → разнобой написаний, сломанная фильтрация
Число / целоеЦена, вес, срок, количество — всё, что участвует в диапазонахСтрока вместо числа → невозможна сортировка и диапазонный фильтр
Привязка к элементамСвязь с записью другого инфоблока (например, «похожие кейсы»)Дублирование текста вместо связи → рассинхрон при правке
Привязка к разделамСсылка на категорию другого инфоблока или того же дереваХранение названия раздела текстом вместо ссылки → «слепая» связь
Привязка к HL-справочникуБольшой общий справочник значений на десятки тысяч записейСписок Bitrix вместо HL при росте справочника → тяжёлая админка
Файл / изображениеМедиа-контент элементаХранение пути к файлу строкой вместо типа «Файл» → нет валидации и предпросмотра
СтрокаДействительно уникальный, не структурируемый текст (заголовок, артикул)—

Практическое правило: если по свойству когда-либо потребуется фильтровать, сортировать или группировать элементы — это не «Строка». Строка оправдана только там, где значение по определению уникально для каждого элемента и не участвует в классификации.

Множественные свойства: когда они нужны

Отдельное проектное решение — делать ли свойство множественным (у элемента может быть несколько значений одного свойства сразу). Типичные кандидаты — теги, категории применения, файлы галереи, связанные материалы. Ошибка в обе стороны обходится дорого: сделать множественным то, что по смыслу должно быть одним значением (например, «статус публикации»), создаёт риск логических ошибок в коде и шаблоне, которые обрабатывают такое свойство как единственное значение. А сделать одиночным то, что по смыслу множественно (например, «применимые отрасли» у решения из портфолио, когда решение подходит сразу нескольким), заставляет либо дублировать элементы под каждую отрасль, либо городить костыль со строкой через запятую.

Правило простое: если бизнес-логика допускает у одного элемента несколько значений одновременно и это не искусственная ситуация — свойство множественное с самого начала. Переключить одиночное свойство в множественное после накопления данных технически возможно, но требует аккуратной миграции значений.

Связи между инфоблоками вместо дублирования

Когда одна и та же сущность нужна в контексте разных типов контента — например, «бренд» упоминается и в каталоге, и в новостях о поступлениях, и в фильтре сайта, — соблазн просто продублировать текстовое поле «Бренд» в каждом инфоблоке. Это работает до первого переименования: если бренд сменил название или произошло слияние двух брендов, придётся вручную поправить значение во всех местах, где оно продублировано текстом, и почти наверняка что-то будет упущено.

Правильное решение — вынести общую сущность в отдельный инфоблок или highload-справочник и связывать с ней остальные инфоблоки через свойство типа «привязка к элементам» (или «привязка к HL-блоку»). Тогда бренд существует в системе в одном месте, у него может быть собственная страница, логотип, описание — а все инфоблоки, которым нужен бренд, просто на него ссылаются. Переименование или правка происходит один раз и мгновенно отражается везде, где есть ссылка.

Справочник «Бренды» Инфоблок «Каталог» Инфоблок «Новости» Умный фильтр
Схема: единый справочник брендов связан привязкой сразу с несколькими инфоблоками — переименование бренда происходит один раз и отражается везде.

Антипаттерн «один инфоблок на всё»

Обратная крайность — завести один инфоблок «Контент» или «Материалы» и пытаться уместить в него новости, акции, кейсы и статьи, различая их одним служебным свойством «Тип материала». На старте это кажется экономией: меньше сущностей в админке, один компонент вывода на всё. На практике это одна из самых дорогих архитектурных ошибок.

Правило: отдельный инфоблок оправдан, если у типа контента своя логика публикации, свой набор обязательных полей или свои права доступа. Если всё это совпадает один в один с другим типом контента — возможно, это действительно один инфоблок с общим набором свойств, и здесь антипаттерна нет. Граница — не количество инфоблоков, а реальные различия в структуре и процессах.

Как это выглядит в админке 1С-Битрикс

Создание инфоблока и настройка его свойств происходит в разделе «Контент → Инфоблоки». Схематично форма создания свойства с выбором типа выглядит так:

Инфоблок «Портфолио» → новое свойство Код INDUSTRY Название Отрасль клиента Тип данных Список Множественное Значения списка Интернет-магазины Корпоративные сайты B2B-порталы + добавить значение Совет: код задаётся один раз и используется в шаблонах — меняйте его до запуска, не после
Схема: код, название, тип данных и множественность задаются в форме свойства один раз. Реальные подписи зависят от версии платформы.

Когда закладывать highload-блок заранее

Highload-блок стоит рассматривать уже на этапе проектирования, если для какого-то справочника заранее видно, что он вырастет до тысяч или десятков тысяч записей без внутренней иерархии — типичные примеры: полный справочник артикулов поставщика, единый список серийных номеров, большой географический справочник населённых пунктов. Такие данные плохо подходят для обычного списочного свойства инфоблока: список Bitrix хранится плоско и при большом числе значений заметно нагружает админку и выборки.

Закладывать highload-блок с первого дня для каждого потенциально большого справочника не обязательно — если объём сейчас невелик, можно начать со списка и мигрировать при росте. Но полезно заранее понимать, какие справочники — кандидаты на такую миграцию, и не встраивать в код и шаблоны жёсткие предположения, что это именно свойство-список инфоблока, которые потом придётся переписывать. Подробно порог перехода и техническую механику разбирает статья «Highload-блоки в 1С-Битрикс: большие справочники и характеристики».

Что учесть для будущего роста контента

Проектирование с запасом не означает добавлять «на всякий случай» десятки полей, которые никогда не понадобятся, — это тоже ошибка, только с другой стороны. Речь о нескольких конкретных практиках, которые не усложняют структуру сегодня, но экономят время завтра:

  1. Оставляйте резерв в дереве разделов. Не создавайте максимально глубокую иерархию сразу, но продумайте, куда «встанет» новая категория через год, не ломая существующие URL.
  2. Выносите потенциально общие сущности отдельно с первого дня. Если бренд, автор или регион используются больше чем в одном инфоблоке — сразу делайте отдельную сущность со связью, а не дублируйте текстом «пока не понадобится».
  3. Документируйте структуру, а не держите её в голове одного разработчика. Таблица «инфоблок → назначение → ключевые свойства → связи» экономит часы при передаче проекта или подключении нового специалиста.
  4. Проверяйте структуру на втором сценарии использования до запуска. Если планируется второй похожий раздел (второй бренд, вторая страна, вторая линейка), проверьте на нём структуру мысленно ещё до разработки — это вскрывает скрытые допущения быстрее, чем ожидание реального роста.

Частые ошибки

Чек-лист проектирования структуры

  1. Типы контента описаны отдельно от меню сайта — с атрибутами, логикой публикации и правами доступа для каждого.
  2. Соглашение о наименовании зафиксировано — коды инфоблоков, свойств и разделов, единый регистр и язык.
  3. Дерево разделов спроектировано под реальную ось классификации, вторая ось (если есть) вынесена свойством.
  4. Тип каждого свойства выбран осознанно — «Строка» только там, где значение действительно уникально и не структурируется.
  5. Множественность свойств определена по бизнес-логике, а не по умолчанию.
  6. Общие сущности вынесены отдельно и связаны привязкой, а не продублированы текстом.
  7. Потенциально большие справочники отмечены как кандидаты на highload-блок при росте.
  8. Структура задокументирована одной таблицей, доступной всей команде проекта.

Вывод

Структура инфоблоков — это не техническая формальность, которую можно доработать «потом», а архитектурное решение с долгим сроком жизни, сравнимое по значимости со структурой базы данных в любом другом проекте. Час на то, чтобы описать типы контента, выбрать типы свойств осознанно и договориться о наименованиях, окупается уже на первом расширении сайта — когда новый раздел встраивается в готовую структуру за час, а не превращается в миграцию на неделю.

Частые вопросы

Чем инфоблок отличается от highload-блока и когда что выбирать?

Инфоблок — универсальная сущность 1С-Битрикс с деревом разделов, версионностью элементов, правами доступа и глубокой интеграцией с каталогом, поиском и умным фильтром. Highload-блок — облегчённая плоская таблица без иерархии разделов, зато заметно быстрее на больших объёмах однотипных записей. Для контента с иерархией и редакторской работой (новости, портфолио, филиалы, сам каталог) нужен инфоблок; для больших плоских справочников характеристик (тысячи значений цвета, артикулов, серийных номеров) — highload-блок. Технический разбор версий 1.0/2.0 и порога перехода на highload — в статье «Инфоблоки 1.0 и 2.0: когда переходить на highload-блоки».

Сколько инфоблоков заводить на проект — один общий или несколько отдельных?

Практическое правило — один инфоблок на один тип контента с самостоятельной логикой публикации и своим набором свойств: отдельно «Новости», отдельно «Портфолио», отдельно «Вакансии», отдельно «Филиалы». Заводить один инфоблок «Контент» на всё сразу — типичный антипаттерн: он быстро обрастает необязательными полями, которые нужны только части записей, а права доступа и модерацию для разных типов контента настроить в одном инфоблоке почти невозможно.

Можно ли поменять структуру инфоблока после запуска сайта без потери данных?

Да, но не любую правку одинаково безопасно делать. Добавить новое свойство или новый раздел — безопасно всегда. А вот смена типа существующего свойства (например, из «строки» в «список») требует миграции уже накопленных значений — их нужно явно перенести в новый формат, иначе часть данных «потеряется» для нового типа поля. Смена символьных кодов свойств и разделов, на которые уже ссылается шаблон или внешний обмен, требует правки во всех местах, где эти коды используются. Именно поэтому дешевле спроектировать типы и код с первого раза, чем чинить это на живом проекте.

Нужно ли сразу проектировать под highload-блоки, если каталог сейчас маленький?

Не обязательно заводить highload-блок с первого дня, но стоит заранее понимать, какие справочники потенциально вырастут до десятков тысяч записей, и не завязывать на них тяжёлую логику инфоблочных связей намертво. Если структура с самого начала предполагает вынесение больших плоских справочников отдельно — переход на highload-блок при росте будет управляемой миграцией, а не аварийной переделкой архитектуры под нагрузкой.

Как назвать инфоблоки и свойства, чтобы не запутаться через год?

Зафиксируйте соглашение о наименовании на старте проекта и придерживайтесь его без исключений: символьные коды — латиницей, в едином регистре (например, змеиный snake_case), без сокращений «на свой вкус» — CATALOG_MANUFACTURER, а не CAT_MANUF или MANUF_2. Человекочитаемые названия — по-русски, единообразно во всех инфоблоках («Бренд», а не в одном месте «Бренд», в другом «Производитель»). Соглашение стоит один раз записать в проектную документацию — это дешевле, чем через год разбираться, почему свойство называется PROP_17.

Поделиться: Telegram ВКонтакте WhatsApp

Проектируете новый сайт или каталог на 1С-Битрикс?

Спроектируем структуру инфоблоков под ваш контент с запасом на рост — разделы, свойства, связи и соглашения о наименовании, чтобы не переделывать через полгода.

Услуга «Каталог товаров»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает каталоги, умный фильтр и обмен с 1С для среднего и крупного бизнеса.

← Все статьи блога