Перейти до основного вмісту

ECMS9 для розробників

ECMS9 — модульна e-commerce платформа на CodeIgniter 4 (PHP 8+). Цей розділ описує, як система влаштована зсередини і як писати для неї модулі.

З чого почати

  1. Архітектура — ядро, модулі, теми, дані.
  2. Структура модуля — з чого складається модуль і які контракти він має виконувати.
  3. Реліз і оновлення — як версія модуля потрапляє до користувачів.
  4. API сервера оновлень — ендпоїнти каталогу, версій та пакетів.
  5. Точки рендеру — тема-незалежні точки розширення вітрини для віджетів модулів.
  6. Профайлер — debug toolbar лише для адміна на живому сайті.

Стек

ШарТехнологія
ФреймворкCodeIgniter 4
PHP8.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.
  • Оновлюваність: кожна версія модуля має проходити тест-гейт і нести коректний маніфест версії.