ECMS9 для розробників
ECMS9 — модульна e-commerce платформа на CodeIgniter 4 (PHP 8+). Цей розділ описує, як система влаштована зсередини і як писати для неї модулі.
З чого почати
- Архітектура — ядро, модулі, теми, дані.
- Структура модуля — з чого складається модуль і які контракти він має виконувати.
- Реліз і оновлення — як версія модуля потрапляє до користувачів.
- API сервера оновлень — ендпоїнти каталогу, версій та пакетів.
- Точки рендеру — тема-незалежні точки розширення вітрини для віджетів модулів.
- Профайлер — debug toolbar лише для адміна на живому сайті.
Стек
| Шар | Технологія |
|---|---|
| Фреймворк | CodeIgniter 4 |
| PHP | 8.1+ (продакшн-цільова — 8.5) |
| Доступ до даних | Query Builder CI4 / CodeIgniter\Model для всього нового коду; Propel (App\Propel\*, легасі) лишається у старішому коді ядра |
| Шаблони | Twig (адмінка і storefront-теми) |
| БД | MariaDB / MySQL |
| Події | CodeIgniter\Events (розширені точки shopMakeOrder, shopAdminOrderEdit, точки рендеру storefront_render_point:* та ін.) |
| Реєстри модулів | Config\ModuleExtensions + Config/Registrar.php у кожному модулі (пункти меню, винятки CSRF/кешу, обробники черги, планові задачі, переклади адмінки) |
| Фонові задачі | внутрішній планувальник (App\Libraries\Scheduler, /admin/scheduler) — crontab на хостингу не потрібен |
Принципи
- Модуль — самодостатня тека в
app/Modules/<Name>/зі своїми контролерами, моделями, в'юхами, роутами і командами. - Ядро не залежить від модулів: вимкнений або відсутній модуль не має
ламати систему. Інтеграція — через події, внески
Config/Registrar.phpта auto-discovery, а не через ручні правки конфігів ядра. - Без Propel у новому коді: нові модулі й нові файли використовують лише Query Builder або моделі CI4, щоб легасі-ORM можна було знімати поетапно.
- Сумісність тем: модуль не має жорстко залежати від конкретної теми; віджети вітрини йдуть через точки рендеру, а клієнтський код підключається так, щоб працювати з будь-якою.
- Самообслуговувана схема: модуль створює власні таблиці ідемпотентно
(
CREATE TABLE IF NOT EXISTSвinstall()/ensureSchema()); зміни схеми ядра йдуть черезspark migrate. - Оновлюваність: кожна версія модуля має проходити тест-гейт і нести коректний маніфест версії.