Когда стандартных страниц недостаточно: реальная проблема
На одном проекте потребовалось создать интерфейс для управления партнёрскими программами с гибкими правилами. Стандартные компоненты Битрикс не подходили — требовалась сложная бизнес-логика с кастомными правами доступа и интеграцией с внешними API. Ручное создание admin-файлов привело бы к дублированию кода и проблемам с обновлениями. Мы выбрали подход на D7 — контроллеры с маршрутизацией, встроенной защитой от CSRF и модульной архитектурой. Разработка заняла 5 дней вместо ожидаемых 2 недель. Экономия бюджета составила существенную сумму за счёт сокращения времени доработок. Наши инженеры имеют сертификаты «1С-Битрикс» и опыт работы с D7 с момента выхода платформы. Свяжитесь с нами, чтобы получить аналогичный результат.
Почему стоит выбрать MVC Controller в Битрикс?
Контроллер избавляет от шаблонного кода: проверка прав через prefilters, автоматический CSRF, поддержка JSON и сессий. В классическом admin-файле вы сами вызываете bitrix_sessid_post() и проверяете права. Опыт нашей команды (более 50 проектов на Битрикс) показывает, что переход на контроллеры сокращает время разработки на 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.
Что даёт использование MVC Controller в Битрикс?
Контроллер избавляет от шаблонного кода: проверка прав через prefilters, автоматический CSRF, поддержка JSON и сессий. В классическом admin-файле вы сами вызываете bitrix_sessid_post() и проверяете права. Опыт нашей команды (более 50 проектов на Битрикс) показывает, что переход на контроллеры сокращает время разработки на 1–2 дня на страницу. Гарантируем стабильность при обновлениях ядра — все prefilters и маршруты управляются кодом, а не файлами.
Постраничная навигация и 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 дня |
| Страница со списком, постраничкой, фильтром и действиями | 4–7 дней |
| Полный CRUD-интерфейс для кастомной сущности с правами и логами | 1.5–2.5 недели |
Стоимость рассчитывается индивидуально. В среднем экономия времени на поддержке составляет 20–30% по сравнению с классическим подходом. Подробнее о преимуществах D7 читайте в официальной документации 1С-Битрикс и на Wikipedia.
Что входит в работу
- Проектирование архитектуры страницы (контроллеры, маршруты, шаблоны)
- Реализация бизнес-логики на D7 с учётом кэширования и прав доступа
- Интеграция с UI Битрикс (CAdminList, фильтры, постраничная навигация)
- Документация по API и структуре кода
- Передача доступов (репозиторий, БД, админка)
- Обучение команды поддержке страницы
- Гарантия 3 месяца на функциональность
Дополнительные сведения о безопасности
В контроллерах D7 можно настраивать prefilters для проверки прав доступа, например `ActionFilter\Authentication` и `ActionFilter\Csrf`. Это исключает ошибки, связанные с ручной проверкой. Кроме того, контроллеры поддерживают работу с сессиями и автоматическую защиту от XSS.Кастомная страница на D7 — это не замена компонентной системе. Это инструмент для задач, которые не укладываются в стандартную модель: инструменты администратора, интерфейсы импорта, дашборды с агрегированными данными. Написанные правильно, они не конфликтуют с ядром при обновлениях. Получите консультацию по вашему проекту — оценим сложность и сроки за 1 день. Запишитесь на бесплатную демонстрацию.







