Chuyển tới nội dung chính

Tổng Quan

Sicommerce là một plugin hệ thống thương mại điện tử cốt lõi được xây dựng riêng cho SkillDo CMS v8, giúp nền tảng mở rộng các chức năng bán hàng một cách toàn diện. Được phát triển theo chuẩn PSR-4, Sicommerce tuân thủ hoàn toàn kiến trúc của CMS với sự phân lớp logic rõ ràng giữa Data Models, Services, Modules và User Interface.


1. Cấu trúc thư mục Plugin

plugins/sicommerce/
├── app/
│ ├── Cart/ # Scart – quản lý giỏ hàng theo Session
│ ├── Controllers/ # Web Controllers (ProductController, CheckoutController...)
│ ├── Gateway/
│ │ ├── Payment/ # Cổng thanh toán (AbstractPaymentBase, PaymentManager...)
│ │ └── Shipping/ # Cổng vận chuyển (AbstractShippingBase, ShippingManager...)
│ ├── helpers/ # Global helper functions
│ ├── Models/ # Eloquent Models (Product, Order, Brands, Currencies...)
│ ├── Modules/
│ │ ├── Admin/ # Logic Admin (Products, Orders, Customer, Setting...)
│ │ └── Web/ # Logic Frontend (Checkout, AccountOrder...)
│ ├── Providers/ # ServiceProvider đăng ký aliases và config
│ ├── Services/ # Business Services (EmailService, OrderHistoryService...)
│ ├── Status/ # Enum trạng thái (OrderStatus, OrderPay)
│ ├── Supports/ # Các lớp tiện ích (Prd, Config, OrderHelper, PrdCartHelper...)
│ └── Template/ # Template render classes (ProductsDetail, ProductsIndex...)
├── bootstrap/ # File đăng ký Hook/Filter theo từng chức năng
├── config/ # File cấu hình mặc định (general.php, order.php, product.php...)
├── database/ # Migration scripts
├── language/ # File dịch (en/, vi/)
├── routes/ # Route definitions (admin.php, api.php, web.php)
└── views/ # Blade views

Khi viết mã mở rộng cho Sicommerce, bạn sẽ chủ yếu tương tác với:

  • app/Cart: Class Scart quản lý Giỏ hàng theo Session.
  • app/Models: Eloquent Models (Product, Order, ProductCategory...).
  • app/Gateway: Thành phần mở rộng cổng thanh toán và giao hàng.
  • app/Modules/Admin: Modules quản lý Admin (sản phẩm, đơn hàng, cấu hình...).
  • app/Modules/Web: Modules xử lý Frontend (checkout, account orders...).
  • app/Template: Classes render giao diện Frontend thông qua Hook.
  • bootstrap/: Files đăng ký action/filter hooks theo từng tính năng.

2. Namespace & Hằng Số

  • Namespace gốc: Ecommerce\
  • Tên plugin (constant): ECOMMERCE_NAME = 'sicommerce'
  • Option config: Lưu trong database table options với key ecommerce_config
// Lấy config bằng helper
$value = Config::get('general.layout'); // \Ecommerce\Supports\Config
$value = config('sicommerce::general.layout'); // Laravel config helper

3. Class Aliases (Facades)

ServiceProvider đã đăng ký sẵn danh sách Class Alias. Bạn có thể gọi trực tiếp không cần namespace đầy đủ.

AliasClass ThựcMô tả
ProductEcommerce\Models\ProductModel sản phẩm
ProductCategoryEcommerce\Models\ProductCategoryModel danh mục sản phẩm
BrandsEcommerce\Models\BrandsModel thương hiệu
CurrenciesEcommerce\Models\CurrenciesModel tiền tệ
AttributesEcommerce\Models\AttributesModel thuộc tính (Size, Color...)
AttributesItemEcommerce\Models\AttributesItemModel giá trị thuộc tính
VariationEcommerce\Models\VariationModel sản phẩm biến thể
OrderEcommerce\Models\OrderModel đơn hàng
OrderItemEcommerce\Models\OrderItemModel dòng sản phẩm trong đơn
ScartEcommerce\Cart\ScartLớp xử lý giỏ hàng
PrdEcommerce\Supports\PrdHelper tiện ích (giá, view, collection...)
PrdCartHelperEcommerce\Supports\PrdCartHelperHelper địa chỉ & hiển thị thuộc tính

Ví dụ sử dụng:

// Không cần gọi \Ecommerce\Models\Product::...
$products = Product::where('public', 1)->get();

// Lấy danh mục
$categories = ProductCategory::tree()->get();

// Định dạng giá
echo Prd::price($product->price);

4. File Bootstrap – Nơi Đăng Ký Hook

Thư mục bootstrap/ chứa các file PHP được load tự động khi plugin khởi động. Mỗi file phụ trách đăng ký hook cho một nhóm tính năng:

FileChức năng
config.phpNavigation, assets, breadcrumb, phân quyền, webhook
products.phpHooks form sản phẩm (add/edit/trash/delete)
order.phpHooks đơn hàng (detail, add, status, email)
customer.phpHooks quản lý khách hàng (bảng, tab chi tiết, đơn hàng web)
setting.phpHooks cấu hình hệ thống Commerce
history.phpGhi log lịch sử đơn hàng
template-index.phpHooks trang danh sách sản phẩm
template-detail.phpHooks trang chi tiết sản phẩm
template-object.phpHooks khối sản phẩm (Product Item)
template-cart.phpHooks giỏ hàng sidebar
template-checkout.phpHooks trang thanh toán
template-collection.phpHooks trang bộ sưu tập sản phẩm

5. Cách thức mở rộng (Extensibility)

Để tùy chỉnh hoặc tích hợp thêm chức năng, không được sửa trực tiếp code trong thư mục plugin sicommerce. Thay vào đó:

  1. Plugin con: Tạo plugin riêng và hook vào các Action/Filter của Sicommerce.
  2. Theme Override: Đặt view override tại views/theme-child/plugins/sicommerce/ để ghi đè Blade views.
  3. Gateway mới: Tạo class kế thừa AbstractPaymentBase/AbstractShippingBase và đăng ký vào Manager.

Hãy tham khảo các trang tài liệu tiếp theo trong mục này để nắm rõ từng loại Hook, Models và quy trình viết cổng thanh toán/vận chuyển.