DevCraft Документации
Руководства

Сторонние модули со своим пространством имён v200.4.1

Как подключить модуль не из DevCraft\Modules\: namespace в манифесте, PSR-4 при старте, настройки в third_party, два пути установки.

Зачем: поставить свой модуль в админку DevCraft, не втискиваясь в пространство имён ядра и не правя корневой composer.json панели.

Нужна Admin ≥ 200.4.1. Обычный штатный модуль по-прежнему собирают через Создание модуля; этот гайд — для чужого префикса классов.

Своё пространство имён

Классы модуля могут жить в любом PSR-4 префиксе, например VasyaPupkin\Settings\.

Панель при старте читает манифесты и регистрирует префикс → корень каталога модуля. Отдельный composer.json у модуля и dump-autoload на каждый сторонний пакет не нужны.

Поле namespace в манифесте

Fluent:

return ModuleManifestBuilder::create()
	->mod('vasya_pupkin_settings')
	->code('vasya_pupkin_settings')
	->namespace('VasyaPupkin\\Settings\\')
	->name('Настройки Васи Пупкина')
	->version('1.0.0')
	->menu([
		AdminLink::page('Настройки', 'dashboard', SettingsPage::class, 'mif-cog', 'vasya_pupkin_settings'),
	])
	->ajax(
		ModuleAjaxConfigBuilder::create()
			->method('save_settings', SaveSettingsHandler::class)
	)
	->build(__DIR__);

Если namespace не задан — как раньше: DevCraft\Modules\{имя_каталога}\.

См. также: ModuleManifestBuilder.

Минимальная структура

Достаточно:

devcraft/src/modules/VasyaPupkinSettings/
├── manifest.php
├── SettingsPage.php          # implements PageInterface / AbstractPage
├── SaveSettingsHandler.php   # тонкий AJAX (по желанию)
└── templates/settings.twig   # тонкий шаблон (по желанию)

Не обязательны: Services/, Models/, миграции, свой settings.schema.php, свой JSON настроек.

Контракт страницы — PageInterface (обычно через AbstractPage). Меню указывает полный класс страницы.

Настройки в конфиге хоста

Минимальный модуль пишет значения в конфиг Admin (devcraft.json), ключ:

third_party.{ваш_mod}.{поле}

Хелпер ядра: DevCraft\Core\Config\ThirdPartyHostSettings::get() / ::merge().

Чужие ключи Admin и чужие third_party[*] не трогать.

Два пути установки

1. Папка на стенде (быстрая проверка)

  1. Скопировать образец:

    specs/010-third-party-namespaces/fixtures/vasya-pupkin-settings/
    → devcraft/src/modules/VasyaPupkinSettings/

  2. Точка входа: engine/inc/vasya_pupkin_settings.php → runAdmin(moduleDir: 'VasyaPupkinSettings').

  3. Зарегистрировать пункт DLE (admin_sections.name = vasya_pupkin_settings). SQL-образец: register_admin_section.sql в фикстуре.

2. Пакет install.xml

Тот же набор файлов + SQL регистрации секции. Состав описан в install.xml.example фикстуры (документация; zip в репозиторий Admin не кладётся).

FAQ

Нужно ли жить в DevCraft\Modules\…?
Нет. Задайте свой префикс через ->namespace(...).

Нужен ли отдельный Composer-пакет всей панели?
Нет. Регистрации PSR-4 при boot достаточно.

Куда писать настройки без своего JSON?
В third_party.{mod} конфига Admin через ThirdPartyHostSettings.

Какой контракт у страницы?
PageInterface / AbstractPage; FQCN в пункте меню манифеста.

Образец

Фикстура: specs/010-third-party-namespaces/fixtures/vasya-pupkin-settings/
Идентификаторы: mod=vasya_pupkin_settings, каталог VasyaPupkinSettings, namespace VasyaPupkin\Settings\.

Пошаговая проверка на стенде — в specs/010-third-party-namespaces/quickstart.md.

На этой странице