Что такое плагин
Что такое плагин
Плагин — самостоятельный пакет, расширяющий Celena, не меняя её ядро. Он может:
- добавлять страницы в админку и/или на фронт;
- регистрировать новые теги шаблонизатора и async-блоки;
- подписываться на хуки ядра (
news.published,user.registeredи т.п.) и испускать свои; - иметь собственные миграции, модели и сервисы;
- распространяться через маркетплейс или вручную (zip).
Важный принцип: ядро самодостаточно. Без плагина всё работает; плагин только расширяет через хуки и не модифицирует ядро. Плагины можно включать и выключать в разделе Плагины панели управления.
Структура
plugins/<slug>/
├── manifest.json метаданные (обязательно)
├── plugin.php точка входа (обязательно)
├── README.md рекомендуется
├── migrations/ миграции БД (необязательно)
├── src/ PHP-классы (PSR-4 Celena\Plugin\<Slug>\)
│ ├── Controllers/
│ ├── Admin/
│ ├── Repositories/
│ └── Support/
├── templates/ .tpl плагина (админка и фронт)
├── languages/ ru.json, en.json и т.д.
├── assets/ CSS/JS → копируются в public/assets/plugins/<slug>/
└── docs/ Markdown-документация плагина
manifest.json
{
"slug": "shop",
"name": "Интернет-магазин",
"version": "1.0.0",
"author": "Celena",
"description": "Каталог, корзина, заказы, платежи.",
"requires": { "php": ">=8.3", "celena": ">=1.0", "plugins": [] },
"permissions": ["news.read", "options.write"],
"migrations": "migrations/"
}
Поле slug обязательно и должно соответствовать ^[a-z0-9][a-z0-9_\-]*$. Имя папки = slug.
Как ядро находит и грузит плагины
PluginManager::discover()сканируетplugins/*, читает каждыйmanifest.json.- Список активных плагинов хранится в опции
active_plugins(JSON-массив slug-ов в таблицеcl_celena_options). - Для активных плагинов
PluginManager::load():- регистрирует namespace
Celena\Plugin\<Slug>\→plugins/<slug>/src/; - подключает
plugin.php(здесь регистрируются маршруты, хуки, теги); - синхронизирует
assets/вpublic/assets/plugins/<slug>/.
- регистрирует namespace
Включение/выключение плагина = добавление/удаление его slug в active_plugins (через админку). При первом включении прогоняются миграции.
Эталонные плагины
В комплекте есть рабочие плагины — изучайте их как образец:
plugins/leads/— конструктор форм и приём заявок (формы, honeypot, экспорт, инъекция формы в лендинг). Хороший минимальный пример.plugins/analytics/— собственная аналитика (трекер, события, цели, дашборд).plugins/shop/— крупный e-commerce (каталог, корзина, заказы) — пример большого плагина.
Дальше — пошаговое создание плагина.