Меню

Автоматическое создание подразделов в инфоблоке при добавлении раздела: реализация события OnAfterIBlockSectionAdd

Автоматическое создание подразделов в инфоблоке при добавлении раздела: реализация события OnAfterIBlockSectionAdd

Задача: когда контент-менеджер создает раздел в инфоблоке, необходимо автоматически создавать подразделы с заранее заданными названиями.
Пример кода на D7
Код
<?php
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
use Bitrix\Iblock\SectionTable;

$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('iblock', 'OnAfterIBlockSectionAdd', 'onAfterIBlockSectionAddHandler');

function onAfterIBlockSectionAddHandler(Event $event)
{
    $arFields = $event->getParameter("fields");
    $arResult = $event->getParameter("result");

    if ($arFields["IBLOCK_ID"] == 1) { // Замените 1 на ID нужного инфоблока
        $sectionList = array(
            array(
                "NAME" => "Подраздел 1",
                "CODE" => "pod_razdel_1",
            ),
            array(
                "NAME" => "Подраздел 2",
                "CODE" => "pod_razdel_2",
            ),
            // Добавьте остальные подразделы в список
        );

        foreach ($sectionList as $section) {
            $iblockId = $arFields["IBLOCK_ID"];
            $sectionId = $arResult["ID"];
            $name = $section["NAME"];
            $code = $section["CODE"];

            $result = SectionTable::add([
                "IBLOCK_ID" => $iblockId,
                "IBLOCK_SECTION_ID" => $sectionId,
                "NAME" => $name,
                "CODE" => $code,
            ]);

            if (!$result->isSuccess()) {
                // Обработка ошибки при создании подраздела
                // например, можно записать ошибку в лог или вывести сообщение об ошибке
                $errors = $result->getErrorMessages();
                echo "Ошибка при создании подраздела: " . implode(", ", $errors);
            }
        }
    }
}
?>

В этом примере используется пространство имен Bitrix\Main и классы из модуля iblock. Мы регистрируем обработчик события через EventManager и используем метод addEventHandler для регистрации обработчика на событие OnAfterIBlockSectionAdd.

В обработчике мы получаем значения полей раздела с помощью методов $event->getParameter("fields") и $event->getParameter("result"). Затем проходим по списку подразделов и создаем новые разделы с использованием класса SectionTable и метода add.
привет, отличная статья, но через D7, не работает:
Код
$result = SectionTable::add([
  "IBLOCK_ID" => $iblockId,
                "IBLOCK_SECTION_ID" => $sectionId,
                "NAME" => $name,
                "CODE" => $code,
            ]);
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Получение токена доступа API Firebase (HTTP v1) с помощью PHP для отправки push-уведомлений.

До июня 2024 года API Firebase использовал постоянный токен доступа, который можно было получить один раз в консоли. Одн...

Удалить всех пользователей которые не делали заказов в магазине 1С-Битрикс

Задача: сайт проработал 7 лет и все время на нем была открытая регистрация, создано много мертвых учетных записей (б...

Умный фильтр на главной странице Битрикс

Редкая но востребованная задачка- это вывести компонент "умный фильтр" на главную страницу магазина на Битрикс. При этом...

Почтовое событие на создание нового элемента инфоблока, через API

Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет...

Вывести все товары, с постраничной навигацией, из всех разделов инфоблока

По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е товаров вывести все товары вс...

Вывести товары в каталоге перебрав их по свойству и разделив на секции.

Задача: В каталоге, у товаров, есть свойство типа список с названием "Тип изделия" и кодом "TIP_IZDELIYA&...

Ajax форма обратной связи, реализация в битрикс

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

Добавление своих полей в почтовые шаблоны Битрикс

Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номер телефона заказчика в почтовый ш...

Отфильтровать новости в Битрикс за заданный период

Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компонента "список новостей". Для э...