Иногда стандартного функционала админки не хватает.
Требуется создать страницу для кастомного отчета, дашборда или инструмента управления.
Битрикс позволяет легко интегрировать свои страницы в административный интерфейс, чтобы они выглядели и работали как «родные».
Архитектура административных скриптов: два файла
Ключевой принцип безопасности и правильной архитектуры — разделение на два файла:
- Основной файл логики: Лежит внутри папки вашего модуля по пути /local/modules/ID_модуля/admin/имя_скрипта.php. Этот файл содержит всю логику страницы.
- Вызывающий скрипт (враппер): Это небольшой файл-прокладка с таким же именем, который лежит в /bitrix/admin/. Его единственная задача — подключить основной файл из папки модуля.
Почему так сделано? Папка /bitrix/modules/ закрыта для прямого доступа из браузера, что обеспечивает безопасность. Вызывающий скрипт в /bitrix/admin/ служит безопасной «точкой входа».
Шаг 1: Создание основного файла логики (скелет страницы)
Создайте файл, например, my_custom_page.php в папке /local/modules/mymodule/admin/.
Этот файл должен иметь строгую структуру с подключением пролога, проверкой прав и подключением эпилога.
// /local/modules/mymodule/admin/my_custom_page.php
// 1. Подключаем служебную часть пролога (ядро, сессия, авторизация)
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
// 2. Подключаем языковой файл для нашей страницы
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
// Определяем константу для модуля, чтобы работала кнопка "Настройки модуля"
// Это необязательно, но является хорошей практикой
define("ADMIN_MODULE_NAME", "mymodule");
// 3. Проверяем права доступа текущего пользователя
// Например, разрешим доступ тем, у кого есть право 'R' (чтение) на наш модуль
if ($APPLICATION->GetGroupRight("mymodule") < "R") {
$APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
}
// 4. Устанавливаем заголовок страницы
$APPLICATION->SetTitle("Мой кастомный отчет");
// 5. Подключаем визуальную часть пролога (шапку админки, меню)
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
// ----------------------------------------------------
// ЗДЕСЬ БУДЕТ НАШ КОНТЕНТ (ФОРМА, СПИСОК И Т.Д.)
// ----------------------------------------------------
echo '<div class="adm-info-message">Страница успешно создана!</div>';
// 6. Подключаем эпилог (подвал админки, панель отладки)
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
Шаг 2: Создание и установка вызывающего скрипта
- В структуре вашего модуля создайте папку install/admin.
- Внутри нее создайте файл my_custom_page.php с таким же именем, как и файл логики.codePHP
// /local/modules/mymodule/install/admin/my_custom_page.php <?php // Подключаем наш основной файл с логикой require_once($_SERVER["DOCUMENT_ROOT"]."/local/modules/mymodule/admin/my_custom_page.php"); ?>
- В файле-инсталляторе модуля (install/index.php) добавьте копирование этого файла при установке и удаление при деинсталляции.codePHP
// /local/modules/mymodule/install/index.php class mymodule extends CModule { // ... function DoInstall() { // ... // Копируем файлы административного интерфейса CopyDirFiles( $_SERVER["DOCUMENT_ROOT"]."/local/modules/mymodule/install/admin", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin", true, true ); // ... } function DoUninstall() { // ... // Удаляем файлы административного интерфейса DeleteDirFiles( $_SERVER["DOCUMENT_ROOT"]."/local/modules/mymodule/install/admin", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin" ); // ... } }
Теперь после установки/переустановки модуля ваш файл my_custom_page.php появится в /bitrix/admin/ и станет доступен по URL http://your-site.ru/bitrix/admin/my_custom_page.php.
Шаг 3: Добавление страницы в меню админки
Чтобы на вашу страницу можно было легко попасть, ее нужно добавить в меню.
- В папке /local/modules/mymodule/admin/ создайте файл menu.php.
- Опишите в нем структуру меню в виде массива $aMenu.
// /local/modules/mymodule/admin/menu.php
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
// Добавляем пункт в меню только если у пользователя есть права на наш модуль
if ($APPLICATION->GetGroupRight("mymodule") >= "R") {
$aMenu = [
[
"parent_menu" => "global_menu_services", // Привязываем к глобальному разделу "Сервисы"
"sort" => 500,
"text" => "Мой кастомный отчет",
"title" => "Страница с моим кастомным отчетом",
"url" => "my_custom_page.php?lang=".LANGUAGE_ID,
"icon" => "fileman_sticker_icon", // Стандартная иконка
"page_icon" => "fileman_sticker_icon",
"items_id" => "menu_my_report", // Уникальный ID ветки меню
"items" => [] // Здесь могут быть вложенные пункты
]
];
return $aMenu;
}
return false;
Система автоматически найдет этот файл и добавит пункт в меню.
Шаг 4: Построение интерфейса
Теперь наполним контентом нашу страницу. Рассмотрим два самых частых сценария: вывод списка и форма редактирования.
Сценарий A: Список данных (CAdminList)
Это самый распространенный тип административной страницы. Класс CAdminList позволяет создать таблицу с сортировкой, фильтром, постраничной навигацией и групповыми действиями.
// ... код страницы my_custom_page.php после prolog_admin_after.php ...
$sTableID = "tbl_my_entity_list";
$oSort = new CAdminSorting($sTableID, "ID", "desc");
$lAdmin = new CAdminList($sTableID, $oSort);
// ... здесь должна быть логика обработки фильтра и групповых действий ...
// Выборка данных
$rsData = MyCustomTable::getList([
'order' => [$by => $order],
]);
$rsData = new CAdminResult($rsData, $sTableID);
$lAdmin->NavStart($rsData);
// Заголовки
$lAdmin->AddHeaders([
['id' => 'ID', 'content' => 'ID', 'sort' => 'id', 'default' => true],
['id' => 'NAME', 'content' => 'Название', 'sort' => 'name', 'default' => true],
]);
// Наполнение строк
while($arRes = $rsData->NavNext(true, "f_")) {
$row =& $lAdmin->AddRow($f_ID, $arRes);
$row->AddViewField("NAME", '<a href="my_entity_edit.php?ID='.$f_ID.'">'.$f_NAME.'</a>');
}
// Вывод списка
$lAdmin->CheckListMode();
$lAdmin->DisplayList();
Сценарий Б: Форма редактирования (CAdminForm / CAdminTabControl)
Используется для страниц создания/редактирования записей.
// ... код страницы my_entity_edit.php после prolog_admin_after.php ...
// Настройка вкладок
$aTabs = [["DIV" => "edit1", "TAB" => "Основное", "TITLE"=>"Основные параметры"]];
$tabControl = new CAdminForm("my_entity_edit_form", $aTabs);
$tabControl->Begin(["FORM_ACTION" => $APPLICATION->GetCurPage()."?ID=".$ID."&lang=".LANG]);
$tabControl->BeginNextFormTab();
// Поля формы
$tabControl->AddEditField('NAME', 'Название:', true, ['size' => 50], $item['NAME']);
$tabControl->AddCheckBoxField("ACTIVE", "Активность:", false, "Y", ($item['ACTIVE'] == "Y"));
// Кнопки
$tabControl->Buttons(["back_url" => "my_entity_list.php?lang=".LANG]);
$tabControl->Show();
Этот код создаст стандартную форму редактирования Битрикс с вкладками и кнопками «Сохранить», «Применить», «Отмена».
Вывод:
Создание собственных административных страниц — это мощный способ расширения стандартного функционала Битрикс.
Следуя четкой архитектуре (основной файл + враппер), проверяя права и используя стандартные классы CAdminList и CAdminForm, вы можете создавать интерфейсы, которые будут полностью интегрированы в систему, удобны для пользователей и легки в поддержке.
кастомная админка Битрикс, страница в админке, prolog_admin_before, CAdminTabControl, CAdminList, CAdminForm, admin/menu.php, DoInstall, CopyDirFiles, административный интерфейс.