專案初期將導航、新聞、標題列表等模組封裝為 JSP 自訂標籤,直接寫死在頁面上。隨著需求變更,行銷/運營團隊希望能在後台管理介面「拖拉拽、開關、排序」模組,無需修改程式碼重新部署。本文梳理實現路徑。
將「頁面由哪些模組組成、順序為何、各模組參數」全部存入資料庫,前台渲染時讀取配置動態組裝。
CREATE TABLE page_layout (
id BIGINT PRIMARY KEY,
page_key VARCHAR(64) NOT NULL, -- 如 'home', 'category_123'
module_id VARCHAR(64) NOT NULL, -- 對應標籤名稱,如 'nav', 'news_list'
sort_order INT DEFAULT 0,
params JSON, -- 模組參數:{ "title": "最新消息", "limit": 10 }
enabled BOOLEAN DEFAULT TRUE,
UNIQUE KEY uk_page_module (page_key, module_id)
);
page_key → List<ModuleConfig>,TTL 1 小時或手動失效。<@taglib prefix="m" module="${mod.moduleId}" /> 或 th:replace 片段。若頁面結構複雜(多欄、側邊欄、輪播區),可引入 區塊 概念:
page_layout: page_key, region (header/left/main/right/footer), module_id, sort_order, params
前台先按 region 分組渲染,再在 region 內按 sort_order 排序。
從「寫死標籤」到「後台配置驅動」,本質是將版面結構資料化。雖增加初期開發成本,但長遠看能大幅降低迭代成本、賦能業務團隊自主運營,是中大型專案必經的架構演進。