Module hoạt động

Module hoạt động

Danh mục source và trạng thái runtime là hai khái niệm khác nhau. Source hiện có 40 module trong cms/*/module.json, nhưng mỗi dự án có thể bật một tập module khác nhau.

Luồng dữ liệu thực tế

  1. Admin gọi GET /api/v2/admin/utilities/modules qua hàm getModules().
  2. Backend đọc danh sách module từ nwidart/laravel-modules, rồi trả name, alias, description, enabled, requires, providers và thông tin dependency.
  3. fetchAndCacheActiveModules() lưu tên module đang bật, status theo tên/alias và cờ catalog đã tải vào localStorage.
  4. Menu và extension kiểm tra đúng tên module owner trước khi render.

Hai kiểu kiểm tra

HàmMặc định khi catalog chưa tảiDùng cho
isModuleActive(name)Fail openMenu/điều khiển tùy chọn cần giảm lỗi ở first paint
isModuleExtensionAllowed(name)Fail closedPanel hoặc content block do module riêng sở hữu, không được rò sang dự án khác

Không dùng isModuleActive() cho extension nhạy với boundary module nếu contract yêu cầu fail closed.

Khai báo module trên điều hướng

Route/menu do module sở hữu đặt tên module backend thật trong navigation-config.js:

{
    name: 'game-authority-runs',
    module: 'GameRun',
}

Một nhóm menu có thể gồm nhiều module khác nhau. Ví dụ shell Game hiện dùng các owner:

Mục điều hướngModule backend
Authority dashboardGameAdmin
RunsGameRun
PlayersGamePlayer
LiveOps, mission, shop, game dataGameLiveOps
LeaderboardGameLeaderboard
MarketplaceGameMarketplace

Không khai báo module: 'Game': backend không có module tên Game.

Các nhóm phổ biến khác dùng owner chuẩn như Content, Product, Ecommerce, RealEstate, Education, Inventory, DigitalLibrary, Widget, CivicDirectory và CatholicHandbook.

API composable

import { useActiveModules } from '@/hooks/useActiveModules'

const {
    activeModules,
    activeModuleStatusMap,
    activeModuleCatalogLoaded,
    isModuleActive,
    isModuleExtensionAllowed,
    fetchAndCacheActiveModules,
} = useActiveModules()

await fetchAndCacheActiveModules()

isModuleActive('Education')
isModuleActive('education')
isModuleExtensionAllowed('GuuXeContentPipeline')

Tên được chuẩn hóa không phân biệt hoa/thường. Status map nhận cả name và alias từ backend.

Endpoint backend

GET /api/v2/admin/utilities/modules
PUT /api/v2/admin/utilities/modules/{module}/status

Endpoint danh sách trả metadata phục vụ màn Kích hoạt module. Endpoint cập nhật trạng thái:

  • không cho tắt Core;
  • kiểm tra dependency còn thiếu khi bật;
  • kiểm tra dependent đang hoạt động khi tắt;
  • có thể trả conflict nếu module cần maintenance/cleanup trước khi tắt;
  • vẫn chịu auth và permission của admin API.

Không bật/tắt theo phỏng đoán

Trước khi đổi trạng thái, đọc missing_dependencies, blocking_dependents, can_disable và thông báo lỗi từ backend. Không sửa trực tiếp modules_statuses.json từ tài liệu vận hành.

Nguồn code

  • base-admin/src/hooks/useActiveModules.js
  • base-admin/src/libs/module.js
  • base-admin/src/config/admin-modules.js
  • ispa-cms/cms/Core/routes/api.php
  • ispa-cms/cms/Core/app/Http/Controllers/V2/Admin/ModuleController.php