Структура проекта

Структура проекта

Ниже — карта каталогов и за что отвечает каждый. Понимание этой структуры — половина успеха при доработке движка.

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.phpPSR-4 автозагрузчик
Kernel.phpИнициализация приложения, контейнер, сервисы
Container.phpDI-контейнер (авто-резолвинг через рефлексию)
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; код кросс-СУБД.