Как создать кастомное действие с привязкой к элементу?

Добрый день! как можно добавить кастомное групповое действие для элементов инфоблока, на примере того как на скрине?
c79ce00e3c834676b7895e5c83490649.png
чтобы выводилось поле для выбора элемента
  • Вопрос задан
  • 1792 просмотра
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Впринципе не сложно.

Для начала Вы подписываетесь на событие OnAdminListDisplay модуля Main.
Именно оно отвечает за действие ДО вывода любого списка элементов в административной панели (за исключением под-листов у инфоблоков и модуля производительности).
На вход оно принимает лишь 1 параметр - экзепляр класса CAdminList (см. /bitrix/modules/main/interface/admin_list.php)

Чтобы обрабатывать нужную таблицу, нужно ограничить выборку. Т.е. Ваш обработчик будет выглядеть как-то так:

<?php
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
    /**
     * $type - тип кода инфоблока, например news, events и т.д.
     * $iblock - идентификатор инфоблока
     * 
     * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
     */
    if ( $oAdminList->table_id == "tbl_iblock_list_".md5($type.".".$iblock) )
    {
        // полезные действия
    }
}
?>


Собственно так, мы получаем возможность работать с выводом.
Для более подробного пояснения лучше прочитать про заказные элементы в административной панели в документации: https://dev.1c-bitrix.ru/api_help/main/general/adm...

Собственно добавим нужные нам данные для работы. Предположим, я хочу логгировать выделенные элементы на странице, тогда мой код будет выглядеть так:
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
    /**
     * $type - тип кода инфоблока, например news, events и т.д.
     * $iblock - идентификатор инфоблока
     * 
     * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
     */
    if ( $oAdminList->table_id == "tbl_iblock_list_".md5("structure.4") )
    {
    	$arActions = $oAdminList->arActions;

    	$arActions['alert'] = 'Ругаться!';

    	$oAdminList->AddGroupActionTable($arActions);
    }
}

AddEventHandler("main", "OnAfterEpilog", "iblockAlert");

function iblockAlert()
{
	$oRequest = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();

	// Проверяем, что работает только в админке
	if ( $oRequest->isAdminSection() )
	{
		if (
			// Интересуют только интерактивные запросы
			$oRequest->get('mode')=='frame'
			// Где передана переменна IBLOCK_ID
			&& $oRequest->get('IBLOCK_ID')==4
			// Соответствующие нашему action
			&& $oRequest->get('action')=='alert'
			)
		{
			/**
			 * Вот тут можно сделать что угодно
			 * Можно получить выделенные ID
			 * через $oRequest->get('ID')
			 * Если он пуст, значит действие на всех элементах инфоблока
			 */
		}
	}
}


На самом деле параметров гораздо больше - есть еще custom области, которые можно выводить, но суть та же. Если захотите добавить свое поле (я добавлял простой action), то лучше глянуть в исходники и там уже по аналогии разрбраться
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы