Коли стандартних сторінок недостатньо: реальна проблема
На одному проєкті знадобилося створити інтерфейс для управління партнерськими програмами з гнучкими правилами. Стандартні компоненти Бітрікс не підходили — вимагалася складна бізнес-логіка з кастомними правами доступу та інтеграцією з зовнішніми API. Ручне створення admin-файлів призвело б до дублювання коду та проблем з оновленнями. Ми обрали підхід на D7 — контролери з маршрутизацією, вбудованим захистом від CSRF та модульною архітектурою. Розробка зайняла 5 днів замість очікуваних 2 тижнів. Економія бюджету склала близько $2000. Наші інженери мають сертифікати «1С-Бітрікс» та досвід роботи з D7 з моменту виходу платформи. Команда має 7+ років досвіду з 1С-Бітрікс та реалізувала понад 50 проєктів. Зв'яжіться з нами, щоб отримати аналогічний результат.
Чому варто обрати MVC Controller у Бітрікс?
Контролер позбавляє шаблонного коду: перевірка прав через prefilters, автоматичний CSRF, підтримка JSON та сесій. У класичному admin-файлі ви самі викликаєте bitrix_sessid_post() та перевіряєте права. Досвід нашої команди (понад 50 проєктів) показує, що перехід на контролери скорочує час розробки в 2-3 рази порівняно з admin-файлами (у середньому на 1–2 дні на сторінку). Гарантуємо стабільність при оновленнях ядра — всі prefilters та маршрути керуються кодом, а не файлами. Крім того, знижуються витрати на супровід на 20–30% за рахунок однакової структури.
Як створити кастомну сторінку на D7? Два підходи
Класичний admin-файл (/bitrix/admin/my_page.php) — найпростіший варіант, придатний для допоміжних інструментів. Він не вимагає налаштування маршрутизації, але вся перевірка прав та CSRF лягає на розробника.
<?php require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; Loader::includeModule('my.module'); // Проверка прав if (!$APPLICATION->IsAdminPage() || !\CMain::GetUserRight("main") >= "S") { $APPLICATION->AuthForm("Доступ запрещён"); } $APPLICATION->SetTitle("Мой инструмент"); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"); // Вывод содержимого страницы ?> <form method="post" action="<?= $APPLICATION->GetCurPage() ?>"> <?= bitrix_sessid_post() ?> <!-- поля формы --> <input type="submit" value="Выполнить"> </form> <?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"); MVC через Controller — правильний шлях для сторінок з логікою.
namespace MyProject\Controllers; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Engine\ActionFilter; class ReportController extends Controller { public function configureActions(): array { return [ 'getReport' => [ 'prefilters' => [ new ActionFilter\Authentication(), new ActionFilter\HttpMethod(['GET', 'POST']), new ActionFilter\Csrf(), ], ], ]; } public function getReportAction(int $periodDays = 30): array { $data = \MyProject\Services\ReportService::build($periodDays); return ['data' => $data, 'total' => count($data)]; } } Контролер автоматично обробляє запити, перевіряє CSRF-токен та повертає JSON. Маршрут реєструється через \Bitrix\Main\Routing\Router::getInstance()->add().
Покрокова інструкція: створення контролера для кастомної сторінки
- Визначте namespace та клас контролера, успадкувавши його від
\Bitrix\Main\Engine\Controller. - Реалізуйте метод
configureActions(), задавши prefilters для перевірки прав та CSRF. - Створіть action-методи (наприклад,
getListAction,saveAction) з валідацією параметрів. - Зареєструйте маршрут у файлі
local/routes.phpабо черезRouter::add(). - Налаштуйте права доступу за допомогою
ActionFilter\Permissionабо кастомних фільтрів. - Інтегруйте UI: для списків використовуйте
CAdminList, для форм —CAdminForm.
Посторінкова навігація та UI: інтеграція з D7
Для списків даних використовуйте \Bitrix\Main\UI\PageNavigation:
use Bitrix\Main\UI\PageNavigation; $nav = new PageNavigation('page'); $nav->allowAllRecords(false) ->setPageSize(20) ->initFromUri(); $result = \MyProject\Storage\OrderLogTable::getList([ 'select' => ['*'], 'order' => ['ID' => 'DESC'], 'count_total' => true, 'offset' => $nav->getOffset(), 'limit' => $nav->getLimit(), ]); $nav->setRecordCount($result->getCount()); Для адміністративних сторінок зі списками — готовий UI через CAdminList та CAdminFilter.
Порівняння підходів: admin-файл vs Controller
| Критерій | Класичний admin-файл | MVC Controller |
|---|---|---|
| Безпека | Ручний CSRF | Вбудовані prefilters |
| Підтримка | Складніше | Модульна |
| Швидкість розробки | Швидко для простих завдань | Швидше для складних |
| Оновлення ядра | Ризик поломки | Стабільність |
Терміни та вартість
| Тип завдання | Орієнтовний термін | Орієнтовна вартість |
|---|---|---|
| Проста admin-сторінка (форма + вивід даних) | 2–3 дні | від $500 |
| Сторінка зі списком, посторінкою, фільтром та діями | 4–7 днів | від $900 |
| Повний CRUD-інтерфейс для кастомної сутності з правами та логами | 1.5–2.5 тижні | від $1500 |
Вартість розраховується індивідуально. В середньому економія часу на супроводі становить 20–30% порівняно з класичним підходом. Докладніше про переваги D7 читайте в офіційній документації 1С-Бітрікс та на Wikipedia.
Що входить в роботу
- Проектування архітектури сторінки (контролери, маршрути, шаблони)
- Реалізація бізнес-логіки на D7 з урахуванням кешування та прав доступу
- Інтеграція з UI Бітрікс (CAdminList, фільтри, посторінкова навігація)
- Документація по API та структурі коду
- Передача доступів (репозиторій, БД, адмінка)
- Навчання команди підтримці сторінки
- Гарантія 3 місяці на функціональність
Додаткові відомості про безпеку
У контролерах D7 можна налаштовувати prefilters для перевірки прав доступу, наприклад `ActionFilter\Authentication` та `ActionFilter\Csrf`. Це виключає помилки, пов'язані з ручною перевіркою. Крім того, контролери підтримують роботу з сесіями та автоматичний захист від XSS.Кастомна сторінка на D7 — це не заміна компонентній системі. Це інструмент для завдань, які не вкладаються в стандартну модель: інструменти адміністратора, інтерфейси імпорту, дашборди з агрегованими даними. Написані правильно, вони не конфліктують з ядром при оновленнях. Отримайте консультацію по вашому проєкту — оцінимо складність та терміни за 1 день. Запишіться на безкоштовну демонстрацію.







