Начало работы
Создание и структура модулей DevCraft Admin для DLE 20.0.
Руководство для разработчиков плагинов на базе DevCraft Admin.
Для быстрого каркаса можно использовать генератор модулей; ниже — ручная сборка и обязательные артефакты.
1. Предварительные требования
- DLE 20.0, PHP 8.3
- Установленный DevCraft Admin ≥ 200.4.0
- PSR-4 autoload:
DevCraft\Modules\{Name}\→devcraft/src/modules/{Name}/ - После добавления файлов:
composer dump-autoloadвdevcraft/
2. Создание модуля
Вариант A: генератор
DevCraft Admin → Генератор модулей — создаёт каркас под devcraft/src/modules/{Name}/.
Вариант B: вручную
devcraft/src/modules/MyModule/
├── manifest.php
├── settings.schema.php # если есть настройки
├── changelog.data.php
├── Pages/
├── Ajax/
├── Services/ # по необходимости
├── templates/
│ └── *.twig
└── Public/
├── .htaccess
└── icon.pngТочка входа DLE (отдельный плагин или общий архив):
require_once DLEPlugins::Check(ROOT_DIR . '/devcraft/init.php');
DevCraft\Core\Application::instance()->runAdmin(moduleDir: 'MyModule');Файл: engine/inc/{mod}.php.
3. manifest.php
Обязательные блоки:
| Ключ | Назначение |
|---|---|
mod | Код в URL DLE (?mod=...) |
code | Код конфигурации JSON (devcraft/config/{code}.json) |
meta | name, version, description, icon, ссылки |
menu | Пункты меню через AdminLink::page(); для сателлитов — 5-й аргумент mod |
ajax | controller + methods → классы обработчиков (controller обычно admin) |
changelog | require changelog.data.php |
assets | JS/CSS модуля (опционально) |
Пример AJAX (все запросы идут на devcraft/ajax.php):
'ajax' => [
'controller' => 'admin',
'methods' => [
'settings' => SettingsHandler::class,
],
],Параметры запроса: mod, controller, method, user_hash, data.
DevCraft.Ajax.post(method, data) сам добавляет mod из атрибута body[data-mod] layout-а. Для сателлитов без mod сервер вернёт unknown_method (метод ищется в модуле devcraft).
4. settings.schema.php
Схема настроек через FormSchemaBuilder:
return FormSchemaBuilder::create('my_module') // code = имя JSON-файла
->layout(FormLayout::TABS)
->section(__('Основные'))
->text('export_path', __('Путь'))
->default('devcraft/backup')
->build();- Файл конфигурации:
devcraft/config/{code}.json - Страница: класс
SettingsPage+ шаблонsettings.twigс{% include 'core/includes/form/settings_page.twig' %} - Сохранение:
SettingsHandlerили кастомный обработчик сSettingsFormService supplementFormData()— дополнительные данные для Twig
Кастомный SettingsHandler — для логики после сохранения (создание каталогов, .htaccess, внешние API).
5. changelog.data.php
Массив версий для страницы «История изменений»:
return [
[
'version' => '200.1.0',
'date' => '2026-01-01',
'changes' => [
'added' => [__('Новая возможность')],
'changed' => [],
'fixed' => [],
'removed' => [],
],
],
];6. Фильтры (опционально)
Для таблиц с фильтрацией — {Plugin}/Filter/{name}.filter.schema.php и FilterFormService (см. модуль Admin → логи: Admin/Filter/logs.filter.schema.php).
7. Страницы, AJAX, install.xml
Pages
Наследуйте AbstractPage, метод handle() возвращает ['view' => 'my_module/page.twig', 'data' => [...]].
AJAX
- Реализуйте
AjaxHandlerInterface - Возвращайте
JsonResponseилиFileResponse(скачивание файлов, DevCraft ≥ 200.4.0) - Загрузка на сервер:
UploadedFile+postMultipart - Не создавайте отдельные
engine/ajax/{mod}.php
install.xml
version,dleversion20.0needplugin: имя плагина-зависимости (DevCraft Admin)- Без патча
paths.php— autoload через Composer <notice>:composer dump-autoload, требования к DevCraft
Локализация
XLIFF: devcraft/locales/{locale}/{code}.xliff (Crowdin-совместимый путь).
См. также
- Создание CRUD-страницы — сквозной сценарий: Entity → Repository → список с фильтром → форма → Ajax → манифест → Twig
- Примеры Form — layout stack/tabs/accordion, все типы полей, filter schema
- Генератор модулей
- Composer-пакеты модулей
- Манифест модуля
- Точки входа
- ИИ-инструменты
- Конституция PHP