Розробка адміністративного інтерфейсу масових операцій 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка адміністративного інтерфейсу масових операцій 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розроблення адміністративного інтерфейсу масових операцій у 1С-Бітрікс

Менеджер вибирає 200 товарів у стандартному списку Бітрікса, натискає «Дії» — і бачить лише п'ять пунктів: активувати, деактивувати, видалити, змінити розділ, експорт. Користувацьких операцій немає. Додайте їх через розширення адміністративного інтерфейсу.

Архітектура адміністративних сторінок Бітрікса

Адміністративний список товарів будується компонентом bitrix:iblock.admin.element.list в /bitrix/modules/iblock/admin/. Для додавання користувацьких дій над виборкою не потрібно редагувати системні файли — існує механізм розширення через адміністративний меню-файл та користувацький обробник.

Користувацька адміністративна сторінка розташовується в /bitrix/admin/my_bulk_action.php. Вона отримує список ID через $_REQUEST['ID'][] — це стандарт для передачі виділених елементів з списків Бітрікса.

Додавання пункту в меню дій

Стандартний список інфоблока підтримує додавання кнопок через файл admin_action.php модуля або через JavaScript-інжекцію. Чистіший шлях — реєстрація користувацької дії через CAdminContextMenu:

// У файлі /bitrix/admin/my_module_actions.php
// Включається через /bitrix/php_interface/init.php

AddEventHandler('main', 'OnAdminListDisplay', function() {
    global $APPLICATION;
    $page = $APPLICATION->GetCurPage();

    // Додати кнопку лише на сторінці списку елементів потрібного інфоблока
    if (strpos($page, 'iblock_list_admin.php') !== false
        && (int)$_GET['IBLOCK_ID'] === MY_CATALOG_IBLOCK_ID)
    {
        // Реєстрація не робиться через подію — використовуємо JS
    }
});

На практиці простіше додати кнопку через JavaScript, внедрений в кінець сторінки через $APPLICATION->AddHeadScript() або через включаємий файл в /bitrix/admin/.

JavaScript для додавання кнопки:

document.addEventListener('DOMContentLoaded', function () {
    var toolbar = document.querySelector('.adm-toolbar-panel');
    if (!toolbar) return;

    var btn = document.createElement('input');
    btn.type = 'button';
    btn.value = 'Оновити ціни';
    btn.className = 'adm-btn';
    btn.addEventListener('click', function () {
        var form   = document.getElementById('list_form');
        var action = document.createElement('input');
        action.type  = 'hidden';
        action.name  = 'action';
        action.value = 'bulk_price_update';

        var target  = document.createElement('input');
        target.type  = 'hidden';
        target.name  = 'target_url';
        target.value = '/bitrix/admin/my_bulk_price_update.php';

        form.appendChild(action);
        form.appendChild(target);
        form.submit();
    });

    toolbar.appendChild(btn);
});

Обробник масової операції

Файл /bitrix/admin/my_bulk_price_update.php — сторінка обробки:

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php';

$APPLICATION->SetTitle('Масове оновлення цін');

// Перевірити права
if (!\Bitrix\Main\Engine\CurrentUser::get()->isAdmin()) {
    die('Access denied');
}

$ids = array_map('intval', (array)$_REQUEST['ID']);
$ids = array_filter($ids);

require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php';

if (!empty($ids) && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['confirm'])) {
    // Виконати операцію
    $markup = (float)$_POST['markup'];

    foreach (array_chunk($ids, 50) as $chunk) {
        foreach ($chunk as $id) {
            $purchase = getPurchasePrice($id);
            if ($purchase > 0) {
                updateRetailPrice($id, $purchase * (1 + $markup / 100));
            }
        }
    }

    LocalRedirect('/bitrix/admin/iblock_list_admin.php?IBLOCK_ID=' . MY_CATALOG_IBLOCK_ID . '&lang=uk');
}
?>

<!-- Форма підтвердження -->
<form method="post" action="">
    <p>Вибрано товарів: <b><?= count($ids) ?></b></p>
    <label>Надбавка (%):
        <input type="number" name="markup" value="40" min="0" max="500">
    </label>
    <?php foreach ($ids as $id): ?>
        <input type="hidden" name="ID[]" value="<?= $id ?>">
    <?php endforeach; ?>
    <input type="hidden" name="confirm" value="Y">
    <?= bitrix_sessid_post() ?>
    <input type="submit" value="Оновити" class="adm-btn-green">
    <a href="javascript:history.back()" class="adm-btn">Скасувати</a>
</form>

<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php'; ?>

Прогресс-бар для тривалих операцій

При оновленні 1000+ елементів потрібен прогресс-індикатор. Бітрікс реалізує це через механізм CAdminProgress або AJAX-пулінг.

Паттерн з AJAX: операція розбивається на кроки, кожен крок — AJAX-запрос, який обробляє пакет і повертає {processed: N, total: M}. JavaScript оновлює прогресс-бар і запускає наступний крок. Збереження черги між кроками — через $_SESSION або b_option по тимчасовому ключу.

Контроль доступу

Кожен обробник масової операції перевіряє:

  1. CSRF-токен через check_bitrix_sessid().
  2. Права користувача через \Bitrix\Main\Engine\CurrentUser::get()->isAdmin() або \Bitrix\Main\Access.
  3. Приналежність передадених ID до очікуваного інфоблока — захист від підстановки чужих ID.