Структура проекта
Структура проекта
Ниже — карта каталогов и за что отвечает каждый. Понимание этой структуры — половина успеха при доработке движка.
core/ Ядро CMS (каркас, не знает о домене)
modules/ Встроенные модули CMS
plugins/ Плагины (расширения)
templates/ Темы (оформление)
public/ Публичная статика (nginx отдаёт напрямую)
storage/ Временные данные (кеш, логи, загрузки, сессии)
config/ Конфигурация (app.php, database.php, cache.php)
bin/ CLI-команды (bin/celena)
index.php Точка входа фронта
admin.php Точка входа админки
install.php Визард установки
.env Окружение (креды БД, ключи)
core/ — ядро
| Папка/файл | Назначение |
|---|---|
Autoloader.php | PSR-4 автозагрузчик |
Kernel.php | Инициализация приложения, контейнер, сервисы |
Container.php | DI-контейнер (авто-резолвинг через рефлексию) |
Config.php | Загрузка .env и файлов config/*.php |
Http/ | Router, Request, Response, middleware |
Database/ | Connection, QueryBuilder, Schema, Blueprint, MigrationRunner |
Template/ | Engine, Compiler, TagRegistry, теги шаблонизатора |
Plugin/ | Hook, PluginManager, Installer, Marketplace |
Security/ | Auth, Csrf, Permission, Filter, RateLimiter |
I18n/ | Locale, Translator |
Support/ | утилиты (Markdown и др.) |
Mail/, Queue/, Cache/, Ai/ | почта, очередь, кеш, интеграция с ИИ |
modules/ — встроенные модули
Базовая функциональность CMS. Каждый модуль — папка в modules/ с контроллерами в namespace Celena\Module\<Name>\.
AdminBase, Dashboard, Users, Pages, News, Categories, Media, Menus, Comments, CustomFields, Settings, Plugins, Seo, Search, Translations, Account, Webhooks, Banners, Docs, Ai, Cities.
plugins/ — плагины
Расширения, которые можно включать/выключать. Структура одного плагина:
plugins/<slug>/
├── manifest.json метаданные (обязательно)
├── plugin.php точка входа: роуты, хуки, теги (обязательно)
├── src/ PHP-классы (PSR-4 Celena\Plugin\<Slug>\)
├── migrations/ миграции БД
├── templates/ .tpl плагина (админка и фронт)
├── languages/ переводы ru.json/en.json/…
├── assets/ CSS/JS → копируются в public/assets/plugins/<slug>/
└── docs/ Markdown-документация плагина
Подробно — Создание плагина.
templates/ — темы
Каждая тема — папка с theme.json и набором .tpl. Активная тема хранится в опции theme. На celena.io активна тема celena-agency. Подробно — Создание темы.
public/ — публичная статика
nginx отдаёт эти файлы напрямую, мимо PHP:
public/assets/
├── admin/ CSS/JS админки
├── runtime/ общий фронтенд (celena.js, celena.css)
└── plugins/<slug>/ ассеты плагинов (авто-копия из plugins/<slug>/assets/)
storage/ — временные данные
storage/
├── cache/tpl/ скомпилированные шаблоны (.php)
├── cache/data/ кеш данных, rate-limit
├── logs/ логи
├── uploads/ загруженные файлы
└── sessions/ файлы сессий
storage/ лежит вне публично раздаваемого пути — содержимое не отдаётся напрямую.
config/ и .env
config/app.php— имя, окружение, локаль, сессии.config/database.php— параметры подключения (читаются из.env).config/cache.php— драйвер кеша..env— секреты конкретной установки (НЕ в репозитории): креды БД, ключи API. На локали — PostgreSQL, на проде — MySQL; код кросс-СУБД.