Когда вы создаете собственный модуль или сущность, важно предоставить администратору удобный интерфейс для управления этими данными.
Битрикс предлагает мощные классы CAdminList и CAdminForm для создания списков и форм, которые выглядят и работают так же, как стандартные интерфейсы системы.
Задача: Создадим интерфейс для управления записями в кастомной таблице my_custom_table (поля: ID, ACTIVE, SORT, NAME).
Часть 1: Создание страницы списка (CAdminList)
Создадим файл /bitrix/admin/my_entity_list.php.
// /bitrix/admin/my_entity_list.php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin.php");
// Здесь будет D7 ORM запрос к нашей таблице MyCustomTable
// ...
// 1. Настройка объекта списка
$sTableID = "tbl_my_entity_list"; // Уникальный ID таблицы
$oSort = new CAdminSorting($sTableID, "ID", "desc"); // Объект для сортировки
$lAdmin = new CAdminList($sTableID, $oSort); // Создаем сам список
// 2. Настройка фильтра (если нужен)
// ...
// 3. Выборка данных с учетом сортировки и пагинации
// $by и $order берутся из объекта $oSort
$rsData = MyCustomTable::getList([
'order' => [$by => $order],
'offset' => $lAdmin->NavRecordCount,
'limit' => $lAdmin->NavPageSize
]);
// 4. Превращаем результат в объект для CAdminList
$rsData = new CAdminResult($rsData, $sTableID);
// 5. Настройка постраничной навигации
$lAdmin->NavText($rsData->GetNavPrint("Записи"));
// 6. Описание колонок
$lAdmin->AddHeaders([
['id' => 'ID', 'content' => 'ID', 'sort' => 'ID', 'default' => true],
['id' => 'NAME', 'content' => 'Название', 'sort' => 'NAME', 'default' => true],
['id' => 'ACTIVE', 'content' => 'Активность', 'sort' => 'ACTIVE', 'default' => true],
['id' => 'SORT', 'content' => 'Сортировка', 'sort' => 'SORT', 'default' => true],
]);
// 7. Наполнение списка данными
while($arRes = $rsData->NavNext(true, "f_")) {
$row =& $lAdmin->AddRow($f_ID, $arRes); // Добавляем строку
// Форматируем вывод
$row->AddViewField("NAME", '<a href="my_entity_edit.php?ID='.$f_ID.'&lang='.LANG.'">'.$f_NAME.'</a>');
$row->AddCheckField("ACTIVE");
// Создаем контекстное меню для строки
$arActions = [];
$arActions[] = ["ICON"=>"edit", "TEXT"=>"Изменить", "ACTION"=>$lAdmin->ActionRedirect("my_entity_edit.php?ID=".$f_ID)];
$arActions[] = ["SEPARATOR"=>true];
$arActions[] = ["ICON"=>"delete", "TEXT"=>"Удалить", "ACTION"=>"if(confirm('Точно удалить?')) ".$lAdmin->ActionDoGroup($f_ID, "delete")];
$row->AddActions($arActions);
}
// 8. Вывод списка
$lAdmin->CheckListMode(); // Для групповых операций
$APPLICATION->SetTitle("Список моих сущностей");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
$lAdmin->DisplayList();
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
Часть 2: Создание страницы редактирования (CAdminForm)
Создадим файл /bitrix/admin/my_entity_edit.php.
Он будет работать и для создания (если ID не передан), и для редактирования.
// /bitrix/admin/my_entity_edit.php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin.php");
$ID = intval($ID); // ID из URL
// Обработка сохранения формы
if ($REQUEST_METHOD == "POST" && (check_bitrix_sessid())) {
$arFields = ["NAME" => $NAME, "ACTIVE" => $ACTIVE, "SORT" => $SORT];
if ($ID > 0) {
$res = MyCustomTable::update($ID, $arFields);
} else {
$res = MyCustomTable::add($arFields);
$ID = $res->getId();
}
// ... обработка результата и редирект
}
// Получение данных для редактирования
$arItem = MyCustomTable::getById($ID)->fetch();
// 1. Настройка вкладок
$aTabs = [["DIV" => "edit1", "TAB" => "Основное", "TITLE"=>"Основные параметры"]];
$tabControl = new CAdminForm("my_entity_edit", $aTabs);
// 2. Вывод формы
$APPLICATION->SetTitle($ID > 0 ? "Редактирование записи №".$ID : "Добавление записи");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
$tabControl->Begin(
["FORM_ACTION" => $APPLICATION->GetCurPage()."?ID=".$ID."&lang=".LANG]
);
$tabControl->BeginNextFormTab(); // Переключаемся на первую вкладку
// 3. Описание полей
$tabControl->AddEditField('NAME', 'Название:', true, ['size' => 50], $arItem['NAME']);
$tabControl->AddCheckBoxField("ACTIVE", "Активность:", false, "Y", ($arItem['ACTIVE'] == "Y"));
$tabControl->AddEditField('SORT', 'Сортировка:', false, ['size' => 10], $arItem['SORT']);
// 4. Панель с кнопками
$tabControl->Buttons(["back_url" => "my_entity_list.php?lang=".LANG]);
$tabControl->Show();
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
Вывод:
Классы CAdminList и CAdminForm позволяют создавать сложные, но стандартизированные интерфейсы для управления кастомными данными.
Несмотря на кажущуюся сложность, их структура очень логична: настройка -> подготовка данных -> описание полей/колонок -> вывод.
Освоив эти классы, вы сможете интегрировать свои модули в админку Битрикс на профессиональном уровне.
CAdminList, CAdminForm, CAdminTabControl, кастомная админка Битрикс, административный список, форма редактирования, интерфейс.