Обзор
Административный список строится из двух классов:
| Класс | Отвечает за |
|---|---|
DevBx\Core\UI\List\Controller |
что показывать: сущность, колонки, фильтр, права, действия над строками |
DevBx\Core\UI\List\EntityList |
вывод: сетка, фильтр, постраничная навигация, обработка запросов |
Работают они с сущностями, унаследованными от Bitrix\Main\ORM\Data\DataManager: список сам
разбирает поля сущности, строит по ним колонки и фильтр.
Минимальная страница
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
use Bitrix\Main\Loader;
use DevBx\Core\UI\List\Controller;
use DevBx\Core\UI\List\EntityList;
Loader::includeModule('catalog');
Loader::includeModule('devbx.core');
$APPLICATION->SetTitle('Цены');
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php');
$controller = new Controller();
$controller->initialize(['dataClass' => \Bitrix\Catalog\PriceTable::class]);
(new EntityList($controller))->show();
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php');
Почему два класса, а не один
Раньше список был одним классом DevBx\Core\Admin\AdminList: настройки передавались массивом,
особое поведение — функциями обратного вызова. Такой список тяжело было расширять: массив
разрастался, а обратные вызовы не видели друг друга.
Теперь поведение задаётся наследником контроллера — методы переопределяются как обычно, видят состояние объекта и вызывают друг друга. Представление при этом остаётся неизменным.
Если в вашем коде осталось старое имя класса, смотрите страницу Переход со старых классов Admin: там таблица соответствия и порядок замены.
Дальше по главе
- Простой вывод данных — список без единой правки поведения.
- Редактирование списка — правка прямо в строках и поля только для чтения.
- Предустановленный фильтр — список, ограниченный своим условием.
- Своя функция обновления данных — когда сущность не умеет сохранять сама.
- Добавление и удаление данных — кнопки и действия над строками.
- Свой обработчик вывода поля — как показать значение по-своему.
- Добавление редактируемых полей — своё поле ввода в строке списка.