HighLoad-инфоблоки (highloadblock) — это отдельные таблицы БД для хранения больших объёмов однотипных данных: справочников, характеристик, регионов, цветов. В отличие от обычных инфоблоков, каждая сущность живёт в своей таблице и не тормозит на миллионах записей.
Что такое HighLoad-блок и когда он нужен
HighLoad-блок — это описание отдельной сущности (таблицы) в базе данных, к которой Битрикс генерирует ORM-класс для работы через API D7. Каждый блок хранит записи в собственной таблице, а набор колонок задаётся пользовательскими полями.
Основные сценарии применения:
- Справочники — цвета, бренды, регионы, единицы измерения, которые подключаются как источник для свойства типа «Справочник» в инфоблоках.
- Большие объёмы данных — таблицы на сотни тысяч и миллионы строк (гео-базы, прайсы поставщиков, логи), где обычный инфоблок был бы неэффективен.
- Служебные данные — привязки, соответствия артикулов, кэш внешних систем.
Ключевое отличие от инфоблока: у HL-блока нет разделов, активности, дат публикации и штатной привязки к разделам сайта — это «голая» таблица с полями и ORM поверх неё.
Создание HighLoad-блока
Перейдите в Контент → Highload-блоки и нажмите «Добавить Highload-блок». Заполните два обязательных поля:
- Название — имя ORM-класса латиницей, с заглавной буквы, без пробелов и цифры в начале. Например
Colors,Regions,ProductSpecs. - Название таблицы в БД — имя физической таблицы строчными латинскими буквами с подчёркиваниями, например
hl_colors. После сохранения его лучше не менять.
После сохранения Битрикс создаст таблицу в базе данных. На вкладке «Подписи» можно задать русские наименования для интерфейса (заголовок раздела, названия кнопок), а на вкладке «Права доступа» — ограничить доступ по группам пользователей.
Готовый блок появится в списке, и в меню Контент → Highload-блоки добавится пункт для просмотра и наполнения его записей.
Пользовательские поля (колонки)
Колонки таблицы задаются через механизм пользовательских полей. Откройте созданный блок и перейдите на вкладку «Пользовательские поля» → «Добавить поле».
Важное правило: символьный код поля должен начинаться с префикса UF_, например UF_NAME, UF_XML_ID, UF_FILE. Битрикс использует этот код и как имя колонки в БД, и как имя свойства в ORM-выборках.
Наиболее востребованные типы полей для справочника:
| Поле | Тип | Назначение |
|---|---|---|
| UF_NAME | Строка | Отображаемое название записи |
| UF_XML_ID | Строка | Внешний код для импорта и связи |
| UF_FILE | Файл | Картинка/иконка (цвет, бренд) |
| UF_SORT | Число | Индекс сортировки |
| UF_DEF | Да/Нет | Значение по умолчанию |
Если HL-блок планируется как справочник для свойства инфоблока, поля UF_NAME и UF_XML_ID обязательны — по ним строятся выпадающий список и связь значений.
Наполнение записями и импорт
Записи добавляются через интерфейс: в меню Контент → Highload-блоки выберите нужный блок и нажмите «Добавить элемент». Форма собирается автоматически из заданных пользовательских полей.
Для больших объёмов используйте один из способов массовой загрузки:
- Через API D7 — получите класс сущности методом
HighloadBlockTable::compileEntity()и добавляйте строки методомadd()сгенерированного Data-класса. - Прямой SQL/CSV — так как это обычная таблица, загрузку можно выполнить средствами СУБД, соблюдая имена колонок
UF_*. - Свой скрипт импорта из Excel/CSV/XML с маппингом полей.
Пример выборки данных через ORM:
$hl = Bitrix\Highloadblock\HighloadBlockTable::getById($id)->fetch();
$entity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hl);
$rows = $entity->getDataClass()::getList(['select' => ['*']])->fetchAll();
Применение как справочника свойств
Главный «штатный» сценарий — подключение HL-блока в качестве источника значений для свойства инфоблока типа «Справочник». Это удобно для характеристик товаров: цвет, материал, страна, бренд.
- Создайте HL-блок с полями
UF_NAMEиUF_XML_IDи наполните его значениями. - Откройте настройки инфоблока → вкладка «Свойства».
- Добавьте свойство, в поле «Тип» выберите «Справочник» и укажите нужный HL-блок в списке источников.
- Сохраните — теперь в карточке элемента значение выбирается из справочника, а не вводится вручную.
Плюс подхода: единый список значений для всех элементов, картинки к значениям (через UF_FILE) и возможность вывода в умном фильтре с изображениями и цветовыми плашками.
Частые ошибки
Типичные проблемы при работе с HighLoad-блоками:
- Название класса с ошибкой. Имя сущности должно начинаться с заглавной латинской буквы и не содержать цифру первым символом — иначе ORM-класс не скомпилируется.
- Поля без префикса UF_. Символьный код поля обязан начинаться с
UF_. Без него колонка не станет частью сущности. - Переименование таблицы после наполнения. Смена имени таблицы в БД не переносит данные — старая таблица остаётся, новая создаётся пустой.
- Нет прав на модуль. Если пункт «Highload-блоки» не виден, модуль
highloadblockотключён или у группы пользователя нет доступа. - Ожидание разделов и активности. У HL-блока нет дерева разделов и флага активности — фильтрацию «активных» записей делайте своим полем (например
UF_ACTIVE). - Отсутствие индексов. На больших таблицах забывают добавить индексы на поля фильтрации, из-за чего выборки замедляются.
Итог
HighLoad-блоки — правильный инструмент для справочников и таблиц с большим числом однотипных записей, где обычный инфоблок избыточен. Создаются в разделе Контент → Highload-блоки, колонки задаются пользовательскими полями с префиксом UF_, а доступ к данным идёт через ORM D7.
Практический ориентир: если данные нужны как выбираемые значения свойства (цвет, бренд, регион) или их объём измеряется десятками и сотнями тысяч строк — используйте HL-блок. Если нужна публикация, разделы, даты и SEO — остаётесь на обычном инфоблоке.