Object configs
Đọc cấu hình dùng chung của theme trong layout, page, section và block.
configs (có s). Không có alias config hoặc hàm config(). Đây là cấu hình theme, không phải cấu hình Go, biến môi trường hay toàn bộ file trong thư mục config/.Nguồn và thứ tự ưu tiên
- Giá trị
defaultcủa từng field trongconfig/config_schema.json. - Giá trị đã lưu trong
config/config_data.jsonghi đè theo key cấp gốc. Nếu file này không tồn tại, đọcconfig/setting_data.jsonđể tương thích theme cũ. - Override
configsdo backend cấp trong render context ghi đè theo key cấp gốc, nếu có. - Engine xử lý giá trị qua bộ phân giải ngôn ngữ theo locale hiện tại.
Đây là phép gộp nông (shallow merge): object con được thay thế nguyên giá trị, không gộp từng key con. File dữ liệu mới có tồn tại nhưng rỗng sẽ giữ default, không chuyển sang file cũ. JSON sai định dạng sẽ báo lỗi render. Thiếu cả schema và dữ liệu thì configs là object rỗng.
Xem Schema config chuẩn · 111 key: field hệ thống không thể xóa; theme được đặt default và bổ sung field riêng.
Khai báo cấu hình
{
"brand_name": {
"type": "text",
"label": "Tên thương hiệu",
"group": "Thông tin chung",
"default": "Skai"
},
"contact_email": {
"type": "text",
"label": "Email liên hệ",
"group": "Thông tin chung",
"default": "[email protected]"
}
}{
"brand_name": "Thịnh Phát",
"contact_email": "[email protected]"
}group là metadata nhóm field trong giao diện cấu hình; không tạo object con. Ví dụ trên vẫn đọc configs.contact_email, không đọc configs.Thông_tin_chung.contact_email.
Dùng trong template
<h1>{{ configs.brand_name|default:site.name }}</h1>
<p>{{ configs.contact_email }}</p>
{% if configs.show_announcement %}
<aside>{{ configs.announcement }}</aside>
{% endif %}Cấu trúc và kiểu giá trị phụ thuộc JSON thực tế. Boolean dùng true/false trong JSON, không dùng chuỗi "true"/"false". Key chưa có không có giá trị để hiển thị; dùng điều kiện hoặc giá trị dự phòng khi cần.
Object và danh sách
{
"footer": { "copyright": "© Skai" },
"social_links": [
{ "label": "Liên hệ", "url": "/contact" }
]
}<footer>{{ configs.footer.copyright }}</footer>
{% for link in configs.social_links %}
<a href="{{ link.url }}">{{ link.label }}</a>
{% endfor %}Khả năng đọc object/mảng trong runtime không có nghĩa visual editor tự sinh được giao diện chỉnh sửa cho mọi cấu trúc JSON tùy ý.
Locale và bản dịch
Engine phân giải cấu hình theo locale render. Với nội dung dịch trong template, dùng t(); đọc mã ngôn ngữ hiện tại qua request.locale.iso_code.
<html lang="{{ request.locale.iso_code }}">
<p>{{ t('nav.home') }}</p>Phạm vi và bảo mật
- configs là cấu hình chung của theme; section.settings và block.settings thuộc từng section/block. Không thay thế lẫn nhau.
- config/theme.json là metadata của theme, không tự trở thành configs.theme.
- Draft và release đọc cấu hình từ source tương ứng; sửa draft không tự thay đổi release đang chạy.
- Không lưu mật khẩu, API secret hoặc khóa riêng trong cấu hình theme. Theme có thể đưa các giá trị này ra HTML.
- Giữ autoescape; chỉ đưa URL tin cậy vào href/src và không dùng safe cho nội dung không tin cậy.