Kiến trúc nanoCart
Tổng quan
nanoCart có ba thành phần độc lập:
| Thành phần | Vai trò | Deploy |
|---|---|---|
| core | Engine: routing, DB, session, cart | Cùng với cart |
cart (public/) | Webroot e-commerce | Server chính |
| registry | Cung cấp theme/plugin dạng package | Server/domain riêng |
nanoCart/
├── core/ Engine: routing, DB, session, cart, user...
├── public/ Webroot duy nhất expose ra internet
├── storage/
│ └── themes/ Theme đã cài — cart đọc từ đây khi runtime
└── registry/ Chỉ dùng local dev — production dùng service riêngKiến trúc Registry (Service độc lập)
Registry không được deploy cùng cart. Đây là service riêng (website riêng) cung cấp package:
Theme lookup order (runtime):
1. storage/themes/<name>/ ← đã cài (ưu tiên)
2. registry/themes/<name>/ ← local dev fallback
3. core/includes/templates/ ← core mặc địnhCài theme từ registry:
bash
# Cài từ local registry (dev)
php tools/install-theme.php --name=nanocart-default
# Cài từ remote registry (production)
php tools/install-theme.php --url=https://registry.nanocart.vn/themes/nanocart-default.zipSau khi cài, assets tự động publish vào public/themes/{name}/.
Registry Loader (dev only)
core/Registry/Loader.php — chỉ chạy khi registry/ có mặt (local dev).
Tự động discover:
registry/themes/<name>/theme.jsonregistry/plugins/<type>/<name>/plugin.jsonregistry/languages/<code>/manifest.json
Tạo Plugin mới
registry/plugins/payment/my_gateway/
├── plugin.json
├── pm_my_gateway.inc.php # class pm_my_gateway
└── ...plugin.json:
json
{
"name": "pm_my_gateway",
"type": "payment",
"version": "1.0.0",
"psr4": "NanoCart\\Plugins\\Payment\\MyGateway\\"
}Tạo Theme mới
registry/themes/my-theme/
├── theme.json
├── catalog/ # templates catalog
└── admin/ # templates adminHooks
Dùng event::fire() và event::listen() (kế thừa từ core).
Convert Tool
Chạy lại khi upstream có bản mới:
bash
php tools/convert-litecart.php --dry-run
php tools/convert-litecart.php