Блог Горошко Андрея 1C-Битрикс Создание административных интерфейсов: CAdminList и CAdminForm для своих данных

Создание административных интерфейсов: CAdminList и CAdminForm для своих данных

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

Когда вы создаете собственный модуль или сущность, важно предоставить администратору удобный интерфейс для управления этими данными.

Битрикс предлагает мощные классы 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, кастомная админка Битрикс, административный список, форма редактирования, интерфейс.

Мой рейтинг:

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

Related Post

1с Битрикс фильтрация по свойству элементов1с Битрикс фильтрация по свойству элементов

Средний рейтинг Еще нет оценок В Битриксе вы можете использовать различные условия выборки с помощью фильтрации в параметре 'filter' при вызове метода getList() или других методов выборки данных. Вот несколько

Обмен данными между 1С и Битрикс: детальное руководствоОбмен данными между 1С и Битрикс: детальное руководство

Средний рейтинг Еще нет оценок Эта статья подробно описывает процесс обмена данными между 1С и сайтом на базе 1С-Битрикс, используя компонент catalog.import.1c (импорт каталога товаров из 1С на сайт). Мы

Взаимодействие компонентов на одной странице: Фильтр и КаталогВзаимодействие компонентов на одной странице: Фильтр и Каталог

Средний рейтинг Еще нет оценок Очень часто на странице нужно разместить несколько компонентов, которые должны работать вместе. Самый яркий пример — страница каталога, где есть компонент «Умный фильтр» и компонент