Архитектура
Структура ядра, жизненный цикл запроса и принципы работы без фреймворка, которым следует TubePress.
TubePress — намеренно простое программное обеспечение. Здесь нет фреймворка, контейнера внедрения зависимостей и этапа сборки — только хорошо организованный современный PHP с использованием статических классов. На этой странице объясняется, как части соединяются между собой, чтобы вы могли уверенно расширять CMS и точно знать, где размещать свой код.
Философия проектирования
Три идеи определяют всю кодовую базу:
- Без фреймворка. Чистый PHP с пользовательскими статическими классами. Нет runtime-зависимостей Composer, которые могли бы сломаться, и нечего изучать помимо самого PHP.
- Фиксированное ядро, свободные дополнения. Ядро обновляется и не должно редактироваться напрямую. Всё, что вы настраиваете, находится в темах, плагинах или настройках.
- Создан для масштабирования и работы на дешёвом хостинге. Тяжёлая работа разбивается на части, а встроенный pseudo-cron означает, что системный crontab не требуется.
Структура каталогов
Репозиторий разделяет ядро (фиксированное, обновляемое) и дополнения (устанавливаемые и удаляемые пользователями).
CORE — never modified by themes/plugins, replaced by updates
config/ App config, DB config, install marker
src/Core/ App, Database, Router, Pagination, CronManager,
and the managers (Seo, Transcode, Update, …)
src/Auth/ Auth, Gate (permissions)
src/Models/ Video, Category, Tag, Performer, Channel,
Comment, Page, User, Setting, Favorite, History
src/Admin/ Admin CRUD controllers
src/Front/ Public-facing controllers
src/Install/ InstallController, Migrator
src/Helpers/ Format, FileUpload, Sanitizer, Slug, SEO,
Player, RateLimiter, ImpressionTracker
src/Plugin/ HookSystem, PluginInterface, PluginManager
src/Theme/ ThemeManager, ThemeRenderer
sql/ Numbered migrations (001_…sql → 0xx_…sql)
templates/admin/ Admin panel templates (layout + partials)
templates/install/ Install wizard templates
public/ Web root — index.php, uploads/, symlinks
cron/ Optional CLI scripts for a system crontab
ADD-ONS — installable / removable by users
themes/ Theme directories (active: "simply")
plugins/ Plugin directories (agegate, backup, ctr)
lang/ Translation files (en, fr, de, es, ar, …)src/, config/, sql/ или templates/, может быть перезаписано при обновлении. Помещайте изменения в тему или плагин, чтобы они сохранялись.Жизненный цикл запроса
Каждый запрос проходит через public/index.php в одном и том же порядке:
- Проверка версии PHP.
config/php-guard.phpвыполняется первым — безопасный шлюз, который останавливает загрузку при неподдерживаемой версии PHP до загрузки современного синтаксиса. - Инициализация.
config/app.phpнастраивает автозагрузку, сессию и основные службы. - Проверка установки. Если
App::isInstalled()возвращает false (нетconfig/installed.php), запрос перенаправляется к мастеру установки и ничего больше не загружается. - Регистрация маршрутов. Контроллеры администратора, API и фронтенда регистрируют свои маршруты через статический метод
::routes(). - Диспетчеризация.
Router::dispatch()сопоставляет URL и вызывает метод контроллера. - Рендеринг. Действия администратора рендерят
templates/admin/*; действия фронтенда рендерят активную тему черезThemeRenderer::render(). - Работа после рендеринга. Счётчики просмотров сбрасываются, и
CronManager::run()запускает все запланированные задачи.
Маршруты страниц (универсальный /{slug} для статических страниц) регистрируются последними, поэтому они никогда не перекрывают реальные маршруты.
Основные соглашения
| Концепция | Соглашение |
|---|---|
| Контроллеры | AdminXxxController::routes() / FrontXxxController::routes() регистрируют маршруты; методы обрабатывают запросы. |
| Модели | Статические методы: Video::find($id), Video::all($filters), Video::create($data). |
| База данных | Database::fetchOne(), fetchAll(), insert(), update(), delete(), count(), transaction(). |
| Маршрутизатор | Router::get(), Router::post(), Router::param('name'), Router::redirect(). |
| Шаблоны администратора | Router::render('admin/videos', […]) → templates/admin/videos.php (загружает layout.php + частичный шаблон _videos.php). |
| Шаблоны фронтенда | ThemeRenderer::render('home', […]) → шаблон активной темы + его layout.php. |
| Миграции | sql/NNN_name.sql, запускаются автоматически Migrator::run() при установке и обновлении. |
| Хуки | HookSystem::doAction('event') и HookSystem::applyFilter('filter', $value). |
Поддержка веб-серверов
TubePress работает как на Apache, так и на Nginx:
- Apache — файлы
.htaccessобрабатывают переписывание URL и защиту каталогов. - Nginx — директивы
aliasобслуживают ресурсы, а правилаdeny allзащищают чувствительные пути. - Символические ссылки —
public/themes → ../../themesиpublic/templates → ../../templatesоткрывают доступ к ресурсам темы и администратора, сохраняя исходный код PHP за пределами корня веб-сайта.
Корень веб-сайта всегда находится в public/. Всё конфиденциальное — config/, src/, sql/, storage/ — находится за его пределами и дополнительно блокируется на уровне сервера.
Где настраивать
| Вы хотите… | Делайте это в… |
|---|---|
| Изменить внешний вид и макет | Теме (или в настройках «Внешний вид» для изменений без кода) |
| Добавить функцию или интеграцию | Плагине с использованием действий и фильтров |
| Изменить поведение без кода | Настройках |
| Добавить запланированную работу | CronManager в плагине |
Следующие шаги
Остались вопросы?
Откройте заявку в панели управления, и наша команда поможет.