Wiki

Clone wiki

sprint.editor / OnBeforeShowComponentBlocks

Автоматическое добавление блоков через обработчик OnBeforeShowComponentBlocks

Пригодится, если вам нужно вставить, например, блок с рекламой между блоками, а редактировать материал не хотите.

Создайте шаблон блока (например my_advert.php )

Расположите его в bitrix/templates/.default/components/sprint.editor/blocks/.default/my_advert.php

или в любом другом месте где компонент редактора может его найти

Добавьте обработчик в init.php который выполняется перед отображением блоков через компонент sprint.editor:blocks

Пример добавления блока my_advert после любого третьего блока

AddEventHandler(
    'sprint.editor',
    'OnBeforeShowComponentBlocks',
    function (&$blocks) {

        //добавляем пустой блок с рекламой
        $advertBlock = [
            'name'   => 'my_advert',
            'layout' => '0,0',
        ];

        array_splice(
            $blocks,
            3,
            0,
            [$advertBlock]
        );

    }
);

Пример добавления блока my_advert после каждого третьего блока

AddEventHandler(
    'sprint.editor',
    'OnBeforeShowComponentBlocks',
    function (&$blocks) {

        //добавляем пустой блок с рекламой
        $advertBlock = [
            'name'   => 'my_advert',
            'layout' => '0,0',
        ];

        //интервал между блоками с рекламой
        $adverbInterval = 3;

        //количество блоков
        $cntBlocks = count($blocks);

        //количество блоков с рекламой
        $cntAdverbs = floor($cntBlocks / $adverbInterval);

        for ($index = 1; $index <= $cntAdverbs; $index++) {
            array_splice(
                $blocks,
                $index * $adverbInterval + ($index - 1),
                0,
                [$advertBlock]
            );
        }
    }
);

Updated