Перейти к основному содержимому

Событие перед построением дерева разделов

[onBeforeCreateTreeOfGroups] Группы товаров перед созданием разделов​

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

Имя события

В коде модуля событие называется onBeforeCreateTreeOfGroups — с маленькой on. Битрикс сравнивает имена событий без учёта регистра, поэтому подписка на OnBeforeCreateTreeOfGroups тоже сработает.

Когда вызывается:

  • один раз за полный проход импорта групп — после загрузки последней страницы групп из МойСклад в HL-кеш;
  • после того как модуль обработал удаление разделов для групп, которых больше нет;
  • в список попадают все группы из HL-кеша, а если в настройках выбраны корневые группы — только они и их потомки.
Как модуль читает ответ
  • Модуль перебирает ответы всех обработчиков, и параметры последнего EventResult::SUCCESS целиком заменяют allGroups. Ответы не сливаются: каждый обработчик получает исходный список.
  • EventResult::ERROR игнорируется.
  • Исключение из обработчика модуль на месте вызова не перехватывает: шаг импорта групп прерывается, дерево не строится, ошибка попадает в лог агента.
  • Всегда возвращайте полный массив групп, а если менять нечего — не возвращайте ничего.

Параметры события

ПараметрТипОписание
allGroupsarrayГруппы товаров из HL-кеша модуля, ключ — href группы в API МойСклад

Структура allGroups

[
'https://api.moysklad.ru/api/remap/1.2/entity/productfolder/...' => [
'ID' => 15, // ID записи в HL-кеше групп (не ID раздела инфоблока)
'HREF' => 'https://api.moysklad.ru/api/remap/1.2/entity/productfolder/...',
'XML_ID' => 'folderCode', // идентификатор группы, пишется в XML_ID раздела
'PATH' => 'Одежда/Мужская', // путь родительских групп в МойСклад, '' для корневой
'PARENT_HREF' => 'https://api.moysklad.ru/api/remap/1.2/entity/productfolder/...', // '' для корневой
'ARCHIVED' => false, // bool или null
'ACTIVE' => 'Y', // 'Y' / 'N'
'NAME' => 'Рубашки',
'DESCRIPTION' => '',
'DATE_UPDATE' => '27.09.2026 10:15:00', // или ''
],
// ...
]

По итоговому массиву модуль создаёт и обновляет разделы: для каждой группы строит цепочку родителей по PARENT_HREF. Что при этом важно:

  • родитель ищется только в allGroups: если убрать группу, а её дочерние оставить, они станут разделами верхнего уровня;
  • группа с пустым XML_ID пропускается;
  • если добавить группе ключ SECTION_ID с ID существующего раздела, модуль возьмёт этот раздел как есть — не будет ни искать, ни обновлять его, и вложит в него дочерние группы.

Возвращаемое значение

return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $allGroups);