Блог Горошко Андрея 1C-Битрикс Создание кастомной страницы в админке Битрикс: Полное руководство

Создание кастомной страницы в админке Битрикс: Полное руководство

Средний рейтинг
Еще нет оценок

Иногда стандартного функционала админки не хватает.

Требуется создать страницу для кастомного отчета, дашборда или инструмента управления.

Битрикс позволяет легко интегрировать свои страницы в административный интерфейс, чтобы они выглядели и работали как «родные».

Архитектура административных скриптов: два файла

Ключевой принцип безопасности и правильной архитектуры — разделение на два файла:

  1. Основной файл логики: Лежит внутри папки вашего модуля по пути /local/modules/ID_модуля/admin/имя_скрипта.php. Этот файл содержит всю логику страницы.
  2. Вызывающий скрипт (враппер): Это небольшой файл-прокладка с таким же именем, который лежит в /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: Создание и установка вызывающего скрипта

  1. В структуре вашего модуля создайте папку install/admin.
  2. Внутри нее создайте файл 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"); ?>
  3. В файле-инсталляторе модуля (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: Добавление страницы в меню админки

Чтобы на вашу страницу можно было легко попасть, ее нужно добавить в меню.

  1. В папке /local/modules/mymodule/admin/ создайте файл menu.php.
  2. Опишите в нем структуру меню в виде массива $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, административный интерфейс.

Мой рейтинг:

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

Related Post

Работа с объектами D7 ORM: fetchObject, save() и коллекции fetchCollectionРабота с объектами D7 ORM: fetchObject, save() и коллекции fetchCollection

Средний рейтинг Еще нет оценок Метод getList в D7 ORM по умолчанию возвращает массив данных (fetch()). Но вся мощь ORM раскрывается при работе с объектами. Это делает код более строгим, читаемым и

Создание своей ORM-сущности в Битрикс: DataManager и getMap с нуляСоздание своей ORM-сущности в Битрикс: DataManager и getMap с нуля

Средний рейтинг Еще нет оценок D7 ORM позволяет работать не только со стандартными сущностями (ElementTable, UserTable), но и описывать свои собственные для любых таблиц в базе данных. Это позволяет получить все преимущества

CRUD-операции в Bitrix D7 ORM: add, update, delete на практикеCRUD-операции в Bitrix D7 ORM: add, update, delete на практике

Средний рейтинг Еще нет оценок Мы уже рассмотрели, как выбирать данные с помощью getList в D7 ORM. Теперь давайте разберем полный цикл CRUD-операций (Create, Read, Update, Delete), который позволяет полностью управлять данными