Архитектура Seditio строится на принципах прозрачности, процедурного программирования и строгого разделения ответственности между программной логикой и визуальным представлением. В отличие от сложных объектно-ориентированных фреймворков, Seditio предлагает «плоскую» структуру, где поток выполнения всегда линеен и предсказуем.

1. Основной поток выполнения (Request Lifecycle)

Каждый запрос к системе проходит через пять четко определенных этапов. Понимание этого цикла позволяет разработчику точно определить момент для внедрения собственного функционала.

  1. Точка входа (index.php)

    • Инициализирует базовые константы безопасности (SED_CODE) и пути (SED_ROOT).

    • Подключает системный файл правил переписывания URL — system/config.urlrewrite.php для обработки ЧПУ (SEF URLs).

    • Направляет запрос к соответствующему системному модулю (например, page, forums, users).

  2. Загрузка модуля (например, system/core/page/page.php)

    • Подключает библиотеку основных функций system/functions.php.

    • Загружает параметры сервера и базы данных из datas/config.php.

    • Подключает основной файл инициализации системы — system/common.php.

  3. Инициализация (system/common.php)

    • Соединение: Устанавливает связь с БД через драйвер MySQLi.

    • Конфигурация: Загружает настройки сайта из БД в глобальный массив $cfg.

    • Аутентификация: Проверяет сессии/куки и наполняет массив данных пользователя $usr.

    • Расширения: Загружает список активных плагинов и регистрирует хуки.

    • Локализация: Подключает необходимые языковые файлы из system/lang/.

    • Шаблоны: Инициализирует движок шаблонов XTemplateSE.

  4. Обработка запроса (Логика модуля)

    • Модуль выполняет свою основную задачу (выборка страниц, обработка постов форума и т.д.).

    • Обязательно фильтрует входящие данные через sed_import().

    • Вызывает специфические хуки модуля (например, page.main, forums.posts.loop), позволяя плагинам изменять данные «на лету».

    • Подготавливает переменные для передачи в шаблоны.

  5. Вывод данных (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.php

2. Глобальное состояние (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 придерживается процедурного стиля написания кода. Это обеспечивает:

  1. Низкий порог входа: Новичку достаточно знать основы PHP для создания первого плагина.

  2. Прозрачность: Отсутствие глубоких объектных зависимостей позволяет легко отлаживать код.

  3. Производительность: Прямые вызовы функций создают минимальный «оверхед», обеспечивая высокую скорость работы системы.


7. Система шаблонов (XTemplateSE)

Seditio реализует принцип полного отделения логики от представления.

  • В файлах модуля (.php) происходит только обработка данных и «привязка» их к тегам шаблона через $t->assign().

  • В файлах шаблона (.tpl) находится только HTML и теги-плейсхолдеры (например, {PAGE_TITLE}).
    Это гарантирует, что изменение дизайна сайта не затронет его функциональность, а верстальщику не нужно знать PHP.

Оценка:

Пока комментариев нет