Блог Горошко Андрея 1C-Битрикс Групповые действия в main.ui.grid: Обработка чекбоксов и панели действий

Групповые действия в main.ui.grid: Обработка чекбоксов и панели действий

Мы уже создавали грид. Теперь добавим возможность выделить несколько строк галочками и применить к ним действие (например, «Удалить» или «Активировать»).

Шаг 1: Настройка компонента

В параметрах bitrix:main.ui.grid нужно включить чекбоксы и описать доступные действия.

'SHOW_ROW_CHECKBOXES' => true, 
'SHOW_CHECK_ALL_CHECKBOXES' => true, 
'SHOW_ACTION_PANEL' => true, 
'ACTION_PANEL' => [
    'GROUPS' => [
        'TYPE' => [
            'ITEMS' => [
                [
                    'TYPE' => \Bitrix\Main\Grid\Panel\Types::BUTTON,
                    'ID' => 'apply_button',
                    'CLASS' => 'apply',
                    'TEXT' => 'Применить',
                    'ONCHANGE' => [
                        [
                            'ACTION' => \Bitrix\Main\Grid\Panel\Actions::CALLBACK,
                            'DATA' => [
                                ['JS' => "Grid.sendSelected()"] // Отправка формы грида
                            ]
                        ]
                    ]
                ],
                [
                    'TYPE' => \Bitrix\Main\Grid\Panel\Types::DROPDOWN,
                    'ID' => 'action_button_my_grid', // ID селекта действий
                    'NAME' => 'action_button_my_grid',
                    'ITEMS' => [
                        ['NAME' => '(выберите действие)', 'VALUE' => 'none'],
                        ['NAME' => 'Активировать', 'VALUE' => 'activate'],
                        ['NAME' => 'Удалить', 'VALUE' => 'delete'],
                    ]
                ],
            ],
        ]
    ],
],

Шаг 2: Обработка запроса (PHP)

Когда пользователь нажимает «Применить», грид отправляет POST-запрос на текущую страницу (или на ту, что указана в форме).

Нам нужно перехватить этот запрос, получить список ID и выполнить действие.

$request = \Bitrix\Main\Context::getCurrent()->getRequest();

if ($request->isPost() && check_bitrix_sessid() && $request->get('grid_id') == $gridId) {
    
    // Получаем выбранное действие
    $action = $request->get('action_button_' . $gridId);
    
    // Получаем ID отмеченных строк
    $ids = $request->get('ID'); 
    
    // Обработка "Для всех" (если нажата галочка "Для всех")
    $actionAll = $request->get('action_all_rows_' . $gridId);
    if ($actionAll == 'Y') {
        // Если выбраны "Все", то $ids может быть пустым.
        // Нужно сделать выборку из БД с текущим фильтром (см. статью про Filter)
        // и получить все ID.
        $ids = \My\Table::getList(['select' => ['ID'], 'filter' => $currentFilter])->fetchAll();
        $ids = array_column($ids, 'ID');
    }

    if (!empty($ids) && $action) {
        foreach ($ids as $id) {
            switch ($action) {
                case 'delete':
                    \My\Table::delete($id);
                    break;
                case 'activate':
                    \My\Table::update($id, ['ACTIVE' => 'Y']);
                    break;
            }
        }
    }
}

Важные нюансы:

  1. Grid.sendSelected(): Этот JS-метод (где Grid — это JS-объект грида) собирает все отмеченные чекбоксы и отправляет их POST-запросом.
  2. Обработка «Для всех»: Это самый сложный момент. Грид не передает ID всех 1000 элементов. Он передает флаг action_all_rows_GRID_ID = Y. Вам нужно самостоятельно повторить запрос к БД с текущим фильтром, чтобы узнать, к каким именно элементам применять действие.

Вывод:
Групповые действия делают работу с данными эффективной.

Реализация требует аккуратной работы с request и понимания того, как грид передает данные о «выбранных всех» записях.


main.ui.grid групповые действия, action_button, processAction, удаление в гриде, чекбоксы битрикс грид, панель действий, apply_filter.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Стоимость настройки автоматического импорта прайс-листов поставщиков в формате XML / CSVСтоимость настройки автоматического импорта прайс-листов поставщиков в формате XML / CSV

Прозрачный расчет бюджета, честные сметы и понимание совокупной стоимости владения (TCO) — залог успешного сотрудничества и окупаемости инвестиций в веб-разработку на 1С-Битрикс. В статье «Стоимость настройки автоматического импорта прайс-листов поставщиков

Настройка выгрузки файлов, PDF-паспортов и инструкций из 1С на сайтНастройка выгрузки файлов, PDF-паспортов и инструкций из 1С на сайт

Бесшовная интеграция сайта на 1С-Битрикс с внешними системами — это ключевое условие автоматизации продаж и масштабирования бизнеса. Услуга «Настройка выгрузки файлов, PDF-паспортов и инструкций из 1С на сайт» обеспечивает автоматическое

Перенос сайта с MODX (Revolution / Evolution) на 1С-БитриксПеренос сайта с MODX (Revolution / Evolution) на 1С-Битрикс

Профессиональная поддержка, модернизация и оптимизация производительности сайта на 1С-Битрикс — это гарантия высокой конверсии, стабильности продаж и защиты от киберугроз. Услуга «Перенос сайта с MODX (Revolution / Evolution) на 1С-Битрикс»