Архитектура Seditio строится на принципах прозрачности, процедурного программирования и строгого разделения ответственности между программной логикой и визуальным представлением. В отличие от сложных объектно-ориентированных фреймворков, Seditio предлагает «плоскую» структуру, где поток выполнения всегда линеен и предсказуем.
1. Основной поток выполнения (Request Lifecycle)
Каждый запрос к системе проходит через пять четко определенных этапов. Понимание этого цикла позволяет разработчику точно определить момент для внедрения собственного функционала.
Точка входа (index.php)
Инициализирует базовые константы безопасности (SED_CODE) и пути (SED_ROOT).
Подключает системный файл правил переписывания URL — system/config.urlrewrite.php для обработки ЧПУ (SEF URLs).
Направляет запрос к соответствующему системному модулю (например, page, forums, users).
Загрузка модуля (например, system/core/page/page.php)
Подключает библиотеку основных функций system/functions.php.
Загружает параметры сервера и базы данных из datas/config.php.
Подключает основной файл инициализации системы — system/common.php.
Инициализация (system/common.php)
Соединение: Устанавливает связь с БД через драйвер MySQLi.
Конфигурация: Загружает настройки сайта из БД в глобальный массив $cfg.
Аутентификация: Проверяет сессии/куки и наполняет массив данных пользователя $usr.
Расширения: Загружает список активных плагинов и регистрирует хуки.
Локализация: Подключает необходимые языковые файлы из system/lang/.
Шаблоны: Инициализирует движок шаблонов XTemplateSE.
Обработка запроса (Логика модуля)
Модуль выполняет свою основную задачу (выборка страниц, обработка постов форума и т.д.).
Обязательно фильтрует входящие данные через sed_import().
Вызывает специфические хуки модуля (например, page.main, forums.posts.loop), позволяя плагинам изменять данные «на лету».
Подготавливает переменные для передачи в шаблоны.
Вывод данных (system/header.php, system/footer.php)
Формирует финальный HTML-код страницы.
Применяет файлы оформления (.tpl) из директории текущего скина.
Выполняет окончательную сборку ресурсов (JS/CSS) и отправляет ответ браузеру.
Структура запроса
index.php → URL Rewrite → Модуль (system/core/*/module.php)
↓
common.php (инициализация)
↓
module.inc.php (логика)
↓
header.php → Шаблон → footer.php2. Глобальное состояние (Global State)
Seditio использует глобальные массивы для хранения и передачи состояния системы. Это обеспечивает мгновенный доступ к любым данным из любой точки кода (включая плагины и функции).
$cfg (Конфигурация): Все настройки системы, модулей и плагинов.
$cfg['mainurl'] // Главный URL сайта $cfg['maintitle'] // Заголовок сайта $cfg['defaultlang'] // Язык по умолчанию $cfg['defaultskin'] // Шаблон по умолчанию $cfg['mysqlhost'] // Хост БД $cfg['mysqldb'] // Имя БД // ... и множество других настроек
$sys (Системные переменные): Текущее время с учетом часового пояса, уникальный ID запроса, URI, хост и абсолютный URL.
$sys['now'] // Текущее время (timestamp) $sys['now_offset'] // Время с учетом часового пояса $sys['unique'] // Уникальный идентификатор $sys['host'] // Имя хоста $sys['abs_url'] // Абсолютный URL
$usr (Данные пользователя): ID (0 для гостя), имя, уровень доступа, основная группа, текущий язык, скин и массив прав доступа $usr['auth'].
$usr['id'] // ID пользователя (0 для гостя) $usr['name'] // Имя пользователя $usr['level'] // Уровень доступа $usr['maingrp'] // Основная группа $usr['auth'] // Массив прав доступа $usr['skin'] // Текущий шаблон $usr['lang'] // Текущий язык
$out (Данные для вывода): Подготовленные заголовки страниц, мета-теги, канонические URL и системные уведомления.
$out['subtitle'] // Подзаголовок страницы $out['pagetitle'] // Заголовок страницы $out['subdesc'] // Мета-описание
$L (Языковые строки): Массив всех загруженных строк локализации.
$L['Home']; // {PHP.L.Home} Выведет "Главная" или "Home"
$L['Username']; // {PHP.L.Username} Выведет "Имя пользователя"
$L['Edit']; // {PHP.L.Edit} Выведет "Редактировать"3. Константы и безопасность
Безопасность системы базируется на строгом контроле контекста выполнения через константы:
SED_CODE: Флаг безопасности. Каждый PHP-файл системы (кроме index.php) должен начинаться проверкой: if (!defined('SED_CODE')) exit();. Это блокирует прямой доступ к системным файлам через браузер.
SED_ROOT: Константа, содержащая путь к корню проекта.
Флаги режима: SED_INDEX, SED_ADMIN, SED_PLUG — позволяют коду определять, в каком контексте он выполняется в данный момент.
4. Файловая иерархия
Система имеет логичную структуру, разделяющую неизменяемое ядро, пользовательские данные и темы оформления.
/ (Root) ├── index.php # Главная точка входа ├── .htaccess # Конфигурация Apache ├── datas/ # Динамические данные (chmod 777) │ ├── config.php # Основной файл настроек │ ├── avatars/, photos/, users/ # Пользовательский контент │ └── thumbs/, resized/, tmp/ # Кэш изображений и временные файлы ├── system/ # Ядро системы (Core) │ ├── core/ # Системные модули (admin, page, forums...) │ ├── javascript/ # Системные библиотеки Native JS │ ├── lang/ # Файлы локализации (ru, en...) │ ├── common.php # Общая инициализация │ ├── functions.php # Основная библиотека функций API │ ├── database.mysqli.php # Драйвер БД │ ├── config.urlrewrite.php # Правила SEF URLs │ ├── config.extensions.php # Настройки расширений │ ├── config.urltranslation.php # Трансляция URL │ ├── templates.php # Движок XTemplate │ └── header.php / footer.php # Глобальный вывод ├── plugins/ # Директория плагинов │ └── pluginname/ │ ├── pluginname.setup.php # Конфигурация плагина │ ├── pluginname.install.php # Скрипт установки │ ├── pluginname.php # Логика (для Standalone) │ └── pluginname.hooks.php # Обработчики хуков ├── skins/ # Темы оформления (скины) │ └── skinname/ │ ├── skinname.php # Контроллер скина │ └── *.tpl, css/, js/ # Шаблоны и ресурсы └── docs/ # Документация
5. Система плагинов и хуков
Seditio расширяется без вмешательства в файлы ядра. Для этого используется событийная модель:
Хуки (Hooks): Точки в коде ядра, где система проверяет наличие кода плагинов.
Регистрация: При инициализации common.php загружает массив активных хуков из БД.
Выполнение: Функция sed_getextplugins($hook_name) возвращает список файлов плагинов, которые должны быть подключены в данной точке.
6. Процедурный стиль и изучение
Seditio придерживается процедурного стиля написания кода. Это обеспечивает:
Низкий порог входа: Новичку достаточно знать основы PHP для создания первого плагина.
Прозрачность: Отсутствие глубоких объектных зависимостей позволяет легко отлаживать код.
Производительность: Прямые вызовы функций создают минимальный «оверхед», обеспечивая высокую скорость работы системы.
7. Система шаблонов (XTemplateSE)
Seditio реализует принцип полного отделения логики от представления.
В файлах модуля (.php) происходит только обработка данных и «привязка» их к тегам шаблона через $t->assign().
В файлах шаблона (.tpl) находится только HTML и теги-плейсхолдеры (например, {PAGE_TITLE}).
Это гарантирует, что изменение дизайна сайта не затронет его функциональность, а верстальщику не нужно знать PHP.

Комментарии: (0)