Шаблоны¶
HTML админки рендерится через Twig ⧉ с автоэкранированием. Фабрика окружения — EnvironmentFactory.
Расположение¶
| Каталог | Назначение |
|---|---|
devcraft/src/templates/core/ | Общий каркас: layout, меню, формы, макросы |
devcraft/src/modules/{mod}/templates | Шаблоны конкретного модуля |
Отдельная .md-страница для каждого .twig-файла не создаётся — описывается только структура каталогов.
Структура core/¶
| Text Only | |
|---|---|
Точный список файлов см. в репозитории плагина; имена могут дополняться при обновлениях.
Переменные шаблона¶
Страницы (PageInterface) передают в Twig контекст через PageOrchestrator:
module— метаданные из manifest;breadcrumbs— цепочкаBreadCrumb;settings— значения из конфигурации;menu— пункты навигации модуля.
Модульные шаблоны¶
Генератор модулей создаёт стартовый шаблон в templates/modules/{slug}/. Наследуйте core/layout.twig:
| Twig | |
|---|---|
AJAX (DevCraft.Ajax.post)¶
Layout задаёт body[data-mod="{{ mod }}"] и data-ajax-base. DevCraft.Ajax.post(method, data) вызывает:
{ajaxBase}?controller=admin&method={method}&mod={data-mod}
Без mod сателлитные методы (save_suggestion и т.п.) не находятся в реестре.
Multipart-загрузка файлов¶
Общий транспорт панели (не отдельная страница модуля Admin):
| Слой | Артефакт |
|---|---|
| JS | DevCraft.Ajax.postMultipart(url, formData, onProgress?) в devcraft.js |
| Twig | core/includes/upload/drop_form.twig |
| PHP | UploadedFile |
Контракт FormData¶
- Поле файла — обычно
file(как вUploadedFile::fromFilesKey('file')). - JSON-метаданные модуля — поле
data(строка JSON), либо отдельные ключи. user_hashдобавляется автоматически, если его ещё нет вFormData.onProgress(loaded, total)— опциональный колбэк прогресса XHR.
| PHP | |
|---|---|
Скачивание файла клиенту — FileResponse, не multipart.