Skip to content

Latest commit

 

History

History
355 lines (272 loc) · 13.3 KB

File metadata and controls

355 lines (272 loc) · 13.3 KB

Архитектура CMS Sitebill

Обзор

CMS Sitebill построена на модульной MVC-подобной архитектуре с сильным акцентом на расширяемость и гибкость. Система использует комбинацию традиционного PHP подхода и современных паттернов проектирования.

Основные компоненты

1. Ядро системы (Core)

Расположение: /apps/system/lib/

Ядро включает:

  • SiteBill - Главный класс системы, обеспечивающий базовую функциональность
  • Init - Инициализация системы и глобальных переменных
  • MySQL (Db) - Слой работы с базой данных
  • SiteBill_Krascap - Обработчик запросов и маршрутизация
┌─────────────────────────────────────────┐
│         index.php (Entry Point)         │
└───────────────┬─────────────────────────┘
                │
                ▼
┌─────────────────────────────────────────┐
│    Инициализация (Init, settings)       │
└───────────────┬─────────────────────────┘
                │
                ▼
┌─────────────────────────────────────────┐
│         Класс SiteBill (Core)           │
└───────────────┬─────────────────────────┘
                │
                ▼
┌─────────────────────────────────────────┐
│      SiteBill_Krascap (Router)          │
└───────────────┬─────────────────────────┘
                │
                ▼
┌─────────────────────────────────────────┐
│          Модули приложений               │
└─────────────────────────────────────────┘

2. Модульная система

Расположение: /apps/

Система включает более 160 модулей, каждый из которых представляет собой независимое приложение:

  • admin - Административная панель
  • system - Системные функции
  • api - RESTful API
  • billing - Биллинговая система
  • client - Управление клиентами
  • agents - Управление агентами
  • dashboard - Панель управления
  • И многие другие...

Структура модуля

apps/[module_name]/
├── [module_name].xml        # Метаданные модуля
├── lib/                     # Библиотеки модуля
│   └── [module_name].php    # Основной класс
├── template/                # Шаблоны модуля
├── language/                # Языковые файлы
└── fields/                  # Определения полей

Регистрация модуля

Каждый модуль описывается в XML файле:

<?xml version="1.0" encoding="UTF-8"?>
<install>
    <name>module_name</name>
    <version>1.0.0</version>
    <author>Author Name</author>
    <backendMenu>true</backendMenu>
</install>

3. Entity система

Расположение: /entity/

Современный слой абстракции данных, использующий:

  • Laravel Eloquent ORM - Для работы с моделями
  • PSR-4 автозагрузка - Composer autoloading
  • EntityServiceProvider - Service Provider для Laravel-компонентов
namespace Sitebill\Entity;

use Illuminate\Database\Eloquent\Model;

class ExampleModel extends Model {
    protected $table = 'table_name';
    protected $fillable = ['field1', 'field2'];
}

4. Система шаблонов

Расположение: /template/

Frontend шаблоны

  • aidom - Современный шаблон
  • realia - Классический шаблон недвижимости
  • novosel - Адаптивный шаблон
  • real-spaces - Минималистичный дизайн
  • agency - Для агентств недвижимости

Backend шаблоны

  • Административная панель использует собственную систему шаблонов

Smarty Engine

Система использует Smarty 3.x для обработки шаблонов:

$smarty->template_dir = SITEBILL_DOCUMENT_ROOT . '/template/frontend/' . $theme;
$smarty->cache_dir = SITEBILL_DOCUMENT_ROOT . '/cache/smarty';
$smarty->compile_dir = SITEBILL_DOCUMENT_ROOT . '/cache/compile';

5. База данных

Архитектура

┌──────────────────────────┐
│   Приложение              │
└──────────┬───────────────┘
           │
           ▼
┌──────────────────────────┐
│   Db Class (Legacy)       │◄──── Старая система
└──────────┬───────────────┘
           │
┌──────────▼───────────────┐
│  Eloquent ORM (Modern)    │◄──── Новая система
└──────────┬───────────────┘
           │
           ▼
┌──────────────────────────┐
│   MySQL / MariaDB         │
└──────────────────────────┘

Префиксы таблиц

Все таблицы используют настраиваемый префикс (обычно DB_PREFIX):

  • {prefix}_config - Конфигурация
  • {prefix}_data - Основные данные
  • {prefix}_image - Изображения
  • {prefix}_client - Клиенты
  • И т.д.

6. Маршрутизация (Routing)

Request Flow

HTTP Request
    │
    ▼
index.php
    │
    ▼
Init::initGlobals()
    │
    ▼
Sitebill::initRequest()
    │
    ▼
SiteBill_Krascap::main()
    │
    ├─── Routing
    ├─── Controller Selection
    ├─── Action Execution
    │
    ▼
Smarty::display("main.tpl")

URL структура

  • / - Главная страница
  • /admin/ - Административная панель
  • /?action=module&do=action - Запрос к модулю
  • /api/v1/endpoint - REST API

7. Система конфигурации

Уровни конфигурации:

  1. settings.ini.php - Локальные настройки (не в репозитории)
  2. inc/db.inc.php - Настройки БД (генерируется при установке)
  3. База данных - Конфигурация в таблице _config
  4. Модули - Настройки отдельных модулей
// Получение значения конфигурации
$value = $sitebill->getConfigValue('config_key');

// Установка значения
$sitebill->setConfigValue('config_key', 'value');

8. Система прав доступа

Роли и права

Суперадминистратор
    │
    ├─── Администратор
    │       │
    │       ├─── Модератор
    │       │
    │       └─── Редактор
    │
    └─── Менеджер
            │
            └─── Агент

Права проверяются на уровне:

  • Модулей
  • Конкретных действий
  • Объектов данных

9. Кеширование

Расположение: /cache/

Типы кеша:

  • Smarty Cache - /cache/smarty/ - Кеш шаблонов
  • Compile Cache - /cache/compile/ - Скомпилированные шаблоны
  • Upload Cache - /cache/upl/ - Временные загрузки
  • Application Cache - Кеш приложений в БД

10. Мультиязычность

Система: Multilanguage

Multilanguage::start('frontend', $_SESSION['_lang']);

Поддерживаемые локали настраиваются через:

  • apps.language.language_prefix_list
  • Префиксы URL для разных языков

11. API Architecture

Расположение: /apps/api/

RESTful API с поддержкой:

  • JSON responses
  • Authentication
  • Rate limiting
  • Versioning (v1, v2)

Паттерны проектирования

Singleton

Класс SiteBill использует элементы singleton для хранения глобального состояния.

Factory

Создание объектов модулей через фабричные методы.

Observer

Event система через Illuminate\Events\Dispatcher.

Repository

Entity система использует Repository pattern через Eloquent.

Service Provider

Laravel-стиль регистрации сервисов.

Жизненный цикл запроса

  1. Инициализация - Загрузка конфигурации, подключение к БД
  2. Аутентификация - Проверка сессии пользователя
  3. Маршрутизация - Определение модуля и действия
  4. Обработка - Выполнение бизнес-логики
  5. Рендеринг - Генерация HTML через Smarty
  6. Вывод - Отправка ответа клиенту

Расширяемость

Создание нового модуля

  1. Создать директорию в /apps/
  2. Добавить XML описание
  3. Создать основной класс
  4. Зарегистрировать в системе

Создание Entity модели

  1. Создать класс в /entity/src/app/Models/
  2. Расширить Illuminate\Database\Eloquent\Model
  3. Использовать через namespace

Добавление шаблона

  1. Создать директорию в /template/frontend/
  2. Добавить main.tpl и другие шаблоны
  3. Настроить в конфигурации

Безопасность

  • SQL Injection - Использование подготовленных запросов
  • XSS Protection - Экранирование вывода в Smarty
  • CSRF Protection - Токены для форм
  • Authentication - Система сессий и проверка прав
  • File Upload - Валидация типов файлов

Зависимости и взаимодействие

┌─────────────┐      ┌──────────────┐      ┌─────────────┐
│   Frontend  │─────▶│     Core     │◄─────│   Backend   │
└─────────────┘      └──────┬───────┘      └─────────────┘
                            │
                     ┌──────▼───────┐
                     │   Modules    │
                     └──────┬───────┘
                            │
                     ┌──────▼───────┐
                     │   Database   │
                     └──────────────┘

Производительность

  • Lazy Loading - Модули загружаются по требованию
  • Query Optimization - Минимизация запросов к БД
  • Template Caching - Кеширование скомпилированных шаблонов
  • Static Content - Использование CDN для статики

Масштабируемость

Система поддерживает:

  • Горизонтальное масштабирование через балансировку
  • Вертикальное масштабирование через оптимизацию
  • Микросервисную архитектуру через API
  • Кеширование на уровне приложения