Tổng quan về Kiến trúc hệ thống PolyCMS
Kiến trúc Model-View-Controller (MVC)
PolyCMS tuân thủ nghiêm ngặt mô hình kiến trúc Model-View-Controller (MVC) được phát triển trên nền tảng CodeIgniter — cùng một bộ khung framework chạy hệ thống Perfex CRM. Điều này đảm bảo sự đồng bộ và tích hợp mượt mà nhất với cơ sở mã nguồn hiện có của CRM.
Cấu trúc tệp tin mã nguồn
modules/polycms/
├── assets/ # Mã nguồn CSS, JS, hình ảnh cho admin & frontend
├── controllers/ # Các Controller xử lý MVC
│ ├── Posts.php # Thao tác CRUD trên bài viết
│ ├── Pages.php # Quản lý trang tĩnh
│ ├── Categories.php # Quản lý chuyên mục
│ ├── Tags.php # Quản lý thẻ tag
│ ├── Media.php # Thao tác trên thư viện phương tiện
│ ├── Comments.php # Kiểm duyệt bình luận của độc giả
│ ├── Menus.php # Trình dựng menu kéo thả
│ ├── Themes.php # Quản lý giao diện theme
│ ├── Plugins.php # Quản lý các plugin bổ trợ
│ ├── Settings.php # Thiết lập hệ thống CMS
│ ├── Tools.php # Sao lưu, Nhập/Xuất dữ liệu
│ ├── Frontend.php # Điều phối định tuyến và hiển thị trang ngoài
│ └── Dashboard.php # Bảng điều khiển CMS
├── helpers/ # Các hàm bổ trợ (Helper functions)
│ ├── polycms_blog_helper.php
│ ├── polycms_seo_helper.php
│ └── polycms_hook_helper.php
├── language/ # 16 gói ngôn ngữ hệ thống
├── libraries/ # Các lớp dịch vụ (Service classes)
│ ├── ThemeLoader.php # Điều phối hiển thị tệp template của theme
│ ├── PluginManager.php # Quản lý vòng đời hoạt động của các plugin
│ └── ShortcodeParser.php # Trình phân tích mã shortcode
├── models/ # Các Model tương tác cơ sở dữ liệu
│ ├── Blog_post_model.php
│ ├── Blog_category_model.php
│ └── ... (mỗi model cho một nhóm bảng tương ứng)
├── plugins/ # Các plugin đi kèm mặc định (gồm 5 plugin)
├── themes/ # Các giao diện theme đi kèm mặc định
├── views/ # Các tệp template hiển thị admin & frontend
├── migrations/ # Các tệp cập nhật cơ sở dữ liệu migration
├── documentations/ # Tài liệu hướng dẫn đi kèm
├── install.php # Lược đồ khởi tạo các bảng database khi cài đặt
├── uninstall.php # Quy trình gỡ cài đặt an toàn (giữ nguyên dữ liệu)
└── polycms.php # Tệp khai báo mô-đun và đăng ký các hook hệ thốngCấu trúc các bảng cơ sở dữ liệu (Database Schema)
PolyCMS khởi tạo 16 bảng dữ liệu chuyên biệt, tất cả đều được đặt tiền tố bảng mặc định của Perfex CRM + blog_:
| Nhóm phân loại | Các bảng cơ sở dữ liệu tương ứng |
|---|---|
| Nội dung (Content) | blog_posts, blog_pages, blog_page_meta |
| Phân loại (Taxonomy) | blog_categories, blog_tags, blog_post_categories, blog_post_tags, blog_post_meta |
| Tương tác (Engagement) | blog_comments |
| Điều hướng (Navigation) | blog_menus, blog_menu_items, blog_widgets |
| Mở rộng (Extensions) | blog_plugins, blog_plugin_options, blog_themes, blog_theme_options |
| Cấu hình (Configuration) | blog_settings, blog_permalink_settings |
Tất cả các bảng đều được thiết lập chặt chẽ các ràng buộc khóa ngoại (foreign key constraints) và chỉ mục index để tối ưu hóa tốc độ truy xuất. Dữ liệu của CMS hoàn toàn cô lập độc lập với dữ liệu khách hàng của CRM.
Vòng đời xử lý yêu cầu (Request Lifecycle)
Các yêu cầu trong trang quản trị (Admin Requests)
- Perfex CRM chuyển tiếp định tuyến yêu cầu đến controller tương ứng của PolyCMS.
- Controller tiến hành xác thực quyền hạn nhân sự qua hàm
staff_can(). - Controller gọi Model xử lý các truy vấn cơ sở dữ liệu tương ứng.
- Model trả về kết quả dữ liệu thông qua cơ chế CodeIgniter Active Record.
- Controller truyền dữ liệu vào tệp View admin tương ứng để hiển thị giao diện.
Các yêu cầu ở trang ngoài (Frontend Requests)
- Hệ thống định tuyến động so khớp đường dẫn URL hiện tại với các quy tắc permalink.
- Controller
Frontend.phpxác định định dạng nội dung cần hiển thị (bài viết, trang tĩnh, chuyên mục, thẻ tag, trang tìm kiếm hay trang lưu trữ). - Kích hoạt các sự kiện hooks:
polycms_frontend_init,polycms_head. - Lớp
ThemeLoaderphân tích cấu trúc phân cấp để chọn tệp template hiển thị tương ứng của theme. - Render giao diện tệp template kết hợp xử lý các widget và mã shortcodes đính kèm.
- Kích hoạt sự kiện hook:
polycms_footer.
Kiến trúc Hệ thống Plugins
Các plugin được quản lý và tải lên bởi lớp PluginManager trong quá trình khởi tạo mô-đun:
- Quét thư mục
plugins/để đọc thông tin tệp cấu hìnhplugin.json. - Đối chiếu trạng thái kích hoạt của plugin trong bảng dữ liệu
blog_plugins. - Tải các tệp tin mã nguồn chính của các plugin đang hoạt động.
- Các plugin đăng ký các điểm neo tương ứng thông qua các hàm
polycms_add_action()vàpolycms_add_filter(). - Các hooks này sẽ tự động được kích hoạt tại các thời điểm tương ứng trong vòng đời xử lý yêu cầu.
Kiến trúc Hệ thống Giao diện (Themes)
Lớp ThemeLoader chịu trách nhiệm điều phối việc hiển thị giao diện:
- Đọc giao diện đang hoạt động được lưu trong bảng
blog_themes. - Xác định định dạng nội dung hiển thị từ yêu cầu của trang.
- Tìm kiếm tệp template theo phân cấp:
single.php→category.php→tag.php→page.php→index.php. - Tải tệp template trùng khớp đầu tiên tìm thấy trong thư mục theme tương ứng.
- Truyền các dữ liệu nội bộ, thông số widget và cấu hình theme options vào phạm vi hiển thị của template.
Cơ chế bảo mật hệ thống
- Lớp kiểm soát quyền hạn — Toàn bộ các thao tác chỉnh sửa của admin đều được kiểm duyệt qua hàm
staff_can('polycms', ...). - Lọc mã độc XSS — Tích hợp thư viện HTMLPurifier để xử lý sạch mọi nội dung văn bản đa định dạng.
- Ngăn chặn SQL Injection — Sử dụng trình dựng truy vấn CodeIgniter Active Record/Query Builder an toàn.
- Bảo vệ tệp tin hệ thống — Hàm
polycms_validate_file_pathngăn chặn triệt để các hành vi dò tìm thư mục chéo. - Giới hạn tần suất gọi (Rate Limiting) — Cơ chế lưu bộ nhớ đệm IP giúp giới hạn tần suất truy cập ở các endpoint công khai.
- Chốt chặn BASEPATH — Mọi tệp tin PHP của hệ thống đều bắt đầu bằng dòng lệnh khóa bảo vệ
defined('BASEPATH') or exit().
Tài liệu hướng dẫn liên quan
- Tài liệu tham khảo Hooks & Filters — Mô tả API cho toàn bộ các hook có sẵn.
- Tự phát triển một Plugin tùy biến — Hướng dẫn thiết lập khung plugin mới kèm code mẫu.
- Tự phát triển một Giao diện tùy biến — Hướng dẫn chi tiết thiết lập giao diện và tệp template.
- Template Tags & Helpers — Danh sách các hàm bổ trợ hữu ích dành cho theme và plugin.