Giao diện
Câu hỏi thường gặp — System Settings
Sử dụng
Thay đổi tên ứng dụng ở đâu?
Vào Settings → System Settings → Application title. Thay đổi hiển thị ngay trên header và tab trình duyệt sau khi refresh.
Title hỗ trợ i18n template — bạn có thể dùng biến môi trường hoặc translation key. Ví dụ:
My App— hiển thị cố định{{env.APP_NAME}}— lấy từ biến môi trườngAPP_NAME
Logo không hiển thị?
Kiểm tra:
- File logo đã upload thành công qua
plugin-file-manager - Format đúng: PNG hoặc SVG (khuyến nghị SVG cho logo)
- Kích thước phù hợp: ~200×50px cho logo chính, 128×128px cho squareLogo
- Nền trong suốt (transparent background) để hiển thị đẹp trên mọi theme
Favicon không cập nhật trên trình duyệt?
Trình duyệt cache favicon rất mạnh. Thử:
- Hard refresh: Ctrl + Shift + R (hoặc Cmd + Shift + R trên Mac)
- Xóa cache: Clear browser cache rồi tải lại
- Tab mới: Mở tab mới và truy cập lại
- Kiểm tra:
GET /api/systemSettings:get→ fieldfaviconcó URL đúng không
Ngôn ngữ mặc định cho user mới là gì?
Ngôn ngữ mặc định được đặt qua field appLang. Khi user mới đăng ký hoặc đăng nhập lần đầu, hệ thống sử dụng ngôn ngữ này.
User có thể thay đổi ngôn ngữ cá nhân trong profile — không ảnh hưởng setting toàn cục.
Cho phép đăng ký tài khoản mới?
Field allowSignUp (mặc định: true). Để tắt:
- Giao diện: Settings → System Settings → tắt "Allow sign up"
- API:
PUT systemSettings:putvới{ "allowSignUp": false }
Cấu hình
Sự khác nhau giữa title và raw_title?
| Field | Mô tả |
|---|---|
title | Giá trị đã render qua renderJsonTemplate() — thay thế biến môi trường |
raw_title | Giá trị gốc trong Database — có thể chứa template {{env.VAR}} |
Khi đọc (GET), API trả về cả hai. Khi cập nhật (PUT), gửi raw_title.
headerStyle có những giá trị nào?
Giá trị mặc định là appLauncher. Các giá trị khác phụ thuộc vào theme đang sử dụng.
options field dùng để làm gì?
Field JSON mở rộng cho các cấu hình bổ sung. Plugin khác có thể đọc/ghi options để lưu cấu hình toàn cục mà không cần tạo Collection riêng.
Làm sao thay đổi brand (footer text)?
Field brand chứa HTML hiển thị ở footer. Mặc định:
html
Powered by <a href="https://digiforce.vn" target="_blank">Digiforce</a>Cập nhật qua API hoặc giao diện Settings.
Kỹ thuật
Tại sao systemSettings:get là public?
Trang đăng nhập cần hiển thị branding (logo, title, banner) trước khi user đăng nhập. Nếu endpoint yêu cầu auth, trang login sẽ không có branding.
Endpoint chỉ trả về thông tin branding — không expose dữ liệu nhạy cảm.
Bản ghi systemSettings có thể xóa không?
Không. Plugin đăng ký fixedParams cho action destroy: id.$ne: 1 — ngăn xóa bản ghi chính (ID = 1). Điều này bảo vệ cấu hình hệ thống khỏi bị xóa nhầm.
Settings bị reset sau khi update code?
Không bình thường. Settings lưu trong Database, không bị ảnh hưởng bởi code update. Nếu settings bị reset:
- Kiểm tra migration rules (collection dùng
['overwrite', 'skip']— chỉ overwrite schema, skip data) - Kiểm tra có chạy
installlại không (install sẽ tạo mới nếu chưa có)
Plugin có phụ thuộc gì không?
Plugin phụ thuộc @digiforce-nc/plugin-file-manager để upload ảnh (logo, favicon, banner). Nếu plugin-file-manager chưa cài, logo vẫn được tạo nhưng không có URL thực — chỉ lưu metadata (title, extname, mimetype).