CMS Sitebill построена на модульной MVC-подобной архитектуре с сильным акцентом на расширяемость и гибкость. Система использует комбинацию традиционного PHP подхода и современных паттернов проектирования.
Расположение: /apps/system/lib/
Ядро включает:
- SiteBill - Главный класс системы, обеспечивающий базовую функциональность
- Init - Инициализация системы и глобальных переменных
- MySQL (Db) - Слой работы с базой данных
- SiteBill_Krascap - Обработчик запросов и маршрутизация
┌─────────────────────────────────────────┐
│ index.php (Entry Point) │
└───────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Инициализация (Init, settings) │
└───────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Класс SiteBill (Core) │
└───────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ SiteBill_Krascap (Router) │
└───────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Модули приложений │
└─────────────────────────────────────────┘
Расположение: /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>Расположение: /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'];
}Расположение: /template/
aidom- Современный шаблонrealia- Классический шаблон недвижимостиnovosel- Адаптивный шаблонreal-spaces- Минималистичный дизайнagency- Для агентств недвижимости
- Административная панель использует собственную систему шаблонов
Система использует 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';┌──────────────────────────┐
│ Приложение │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ Db Class (Legacy) │◄──── Старая система
└──────────┬───────────────┘
│
┌──────────▼───────────────┐
│ Eloquent ORM (Modern) │◄──── Новая система
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ MySQL / MariaDB │
└──────────────────────────┘
Все таблицы используют настраиваемый префикс (обычно DB_PREFIX):
{prefix}_config- Конфигурация{prefix}_data- Основные данные{prefix}_image- Изображения{prefix}_client- Клиенты- И т.д.
HTTP Request
│
▼
index.php
│
▼
Init::initGlobals()
│
▼
Sitebill::initRequest()
│
▼
SiteBill_Krascap::main()
│
├─── Routing
├─── Controller Selection
├─── Action Execution
│
▼
Smarty::display("main.tpl")
/- Главная страница/admin/- Административная панель/?action=module&do=action- Запрос к модулю/api/v1/endpoint- REST API
- settings.ini.php - Локальные настройки (не в репозитории)
- inc/db.inc.php - Настройки БД (генерируется при установке)
- База данных - Конфигурация в таблице
_config - Модули - Настройки отдельных модулей
// Получение значения конфигурации
$value = $sitebill->getConfigValue('config_key');
// Установка значения
$sitebill->setConfigValue('config_key', 'value');Суперадминистратор
│
├─── Администратор
│ │
│ ├─── Модератор
│ │
│ └─── Редактор
│
└─── Менеджер
│
└─── Агент
Права проверяются на уровне:
- Модулей
- Конкретных действий
- Объектов данных
Расположение: /cache/
Типы кеша:
- Smarty Cache -
/cache/smarty/- Кеш шаблонов - Compile Cache -
/cache/compile/- Скомпилированные шаблоны - Upload Cache -
/cache/upl/- Временные загрузки - Application Cache - Кеш приложений в БД
Система: Multilanguage
Multilanguage::start('frontend', $_SESSION['_lang']);Поддерживаемые локали настраиваются через:
apps.language.language_prefix_list- Префиксы URL для разных языков
Расположение: /apps/api/
RESTful API с поддержкой:
- JSON responses
- Authentication
- Rate limiting
- Versioning (v1, v2)
Класс SiteBill использует элементы singleton для хранения глобального состояния.
Создание объектов модулей через фабричные методы.
Event система через Illuminate\Events\Dispatcher.
Entity система использует Repository pattern через Eloquent.
Laravel-стиль регистрации сервисов.
- Инициализация - Загрузка конфигурации, подключение к БД
- Аутентификация - Проверка сессии пользователя
- Маршрутизация - Определение модуля и действия
- Обработка - Выполнение бизнес-логики
- Рендеринг - Генерация HTML через Smarty
- Вывод - Отправка ответа клиенту
- Создать директорию в
/apps/ - Добавить XML описание
- Создать основной класс
- Зарегистрировать в системе
- Создать класс в
/entity/src/app/Models/ - Расширить
Illuminate\Database\Eloquent\Model - Использовать через namespace
- Создать директорию в
/template/frontend/ - Добавить
main.tplи другие шаблоны - Настроить в конфигурации
- 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
- Кеширование на уровне приложения