颜色主题
Chamilo 2.0 使用数据库驱动的颜色主题系统。主题通过管理界面进行管理,存储在数据库中,并以 CSS 文件的形式写入磁盘。可以为每个访问 URL 自定义主题,允许多 URL 安装具有不同的视觉标识。
数据模型
两个实体驱动主题系统:
ColorTheme (src/CoreBundle/Entity/ColorTheme.php)
id
int
主键
title
string
可读名称
slug
string
由 title 自动生成(例如 "My Theme" → my-theme);用作 var/themes/ 中的目录名称
variables
array (JSON)
CSS 自定义属性名称到值的映射(例如 {"--color-primary-base": "46 117 163"})
AccessUrlRelColorTheme (src/CoreBundle/Entity/AccessUrlRelColorTheme.php)
将 ColorTheme 与 AccessUrl 关联。active 布尔标志标记当前对该 URL 有效的主题。每个访问 URL 一次只能激活一个主题。
主题存储方式
当通过 API 创建或更新主题时,ColorThemeStateProcessor 会生成 CSS 文件并将其写入 Flysystem 的 themes_filesystem(由 var/themes/ 支持):
var/themes/
└── {slug}/
└── colors.css ← 由 ColorTheme.variables 生成生成的 colors.css 将所有变量包裹在 :root 块中:
值是以空格分隔的 RGB 通道三元组(不是 rgb()),这允许 Tailwind 组合透明度变体,例如 bg-primary/50,而无需额外配置。
主题解析优先级
ThemeHelper::getVisualTheme() 按以下顺序解析在任何给定页面上应用的主题 slug:
当前 AccessUrl 的活动主题 —
AccessUrlRelColorTheme记录中active = true的主题用户选择的主题 — 存储在
User实体上的主题,如果启用了profile.user_selected_theme平台设置课程主题 —
course_theme课程设置,如果启用了course.allow_course_theme平台设置学习路径主题 — LP 的
$lp_theme_css值,如果启用了allow_learning_path_theme课程设置THEME_FALLBACK环境变量 — 在.env中设置为THEME_FALLBACK='chamilo'默认 —
chamilo(硬编码为ThemeHelper::DEFAULT_THEME)
资产服务
主题资产由 ThemeController(src/CoreBundle/Controller/ThemeController.php)在 /themes 前缀下提供。
GET /themes/{name}/{path}
服务任何主题资产(CSS、JS、图片);如果在请求的主题中未找到,则回退到 chamilo 主题
GET /themes/{slug}/logo/{type}
服务首选标志(header 或 email),支持 SVG 到 PNG 的回退
POST /themes/{slug}/logos
上传页眉/电子邮件标志(SVG 和/或 PNG)
DELETE /themes/{slug}/logos/{type}
删除特定标志
通用资产路由(/{name}/{path})在请求的主题中缺少文件时会自动回退到 chamilo 默认主题,因此主题只需要包含实际覆盖的文件。
主题在模板中的加载方式
head.html.twig 布局模板通过 Twig 辅助函数加载活动主题的资产:
三个 Twig 函数(在 ChamiloExtension 中注册)通过 ThemeHelper 解析资产路径,应用与上述相同的回退链:
theme_asset('path')
解析主题中资产的 URL
theme_asset_link_tag('path')
完整的 <link rel="stylesheet"> 标签
theme_asset_script_tag('path')
完整的 <script src="..."> 标签
theme_asset_base64('path')
资产的 Base64 编码数据 URI
theme_logo('header'|'email')
最佳可用标志的 URL
API 端点
主题管理通过 API Platform REST API 暴露(仅限管理员):
POST
/api/color_themes
创建新主题
PUT
/api/color_themes/{id}
更新现有主题
POST
/api/access_url_rel_color_themes
为访问 URL 关联/激活主题
GET
/api/access_url_rel_color_themes
列出当前访问 URL 的主题关联
创建自定义主题
标准工作流程是通过管理界面(管理员 → 颜色主题),它会调用上述 API 端点。要以编程方式创建主题:
使用 JSON 主体向
POST /api/color_themes发送请求:
这将持久化实体并写入 var/themes/my-theme/colors.css。
使用
POST /api/access_url_rel_color_themes将其与当前访问 URL 关联并激活:
要添加自定义图片(标志、网站图标、背景),可以通过 POST /themes/{slug}/logos 上传,或者直接将它们放置在 var/themes/{slug}/images/ 目录下。
颜色变量参考
默认 Tailwind 配置所需的所有变量:
--color-primary-base
主要品牌颜色
--color-primary-gradient
主要的较暗渐变色
--color-primary-button-text
主要按钮上的文本颜色
--color-primary-button-alternative-text
主要按钮上的替代文本颜色
--color-secondary-base
次要强调颜色
--color-secondary-gradient
次要渐变色
--color-secondary-button-text
次要按钮上的文本颜色
--color-tertiary-base
第三颜色
--color-tertiary-gradient
第三渐变色
--color-tertiary-button-text
第三按钮上的文本颜色
--color-success-base
成功状态颜色
--color-success-gradient
成功渐变色
--color-success-button-text
成功按钮上的文本颜色
--color-info-base
信息状态颜色
--color-info-gradient
信息渐变色
--color-info-button-text
信息按钮上的文本颜色
--color-warning-base
警告状态颜色
--color-warning-gradient
警告渐变色
--color-warning-button-text
警告按钮上的文本颜色
--color-danger-base
危险/错误状态颜色
--color-danger-gradient
危险渐变色
--color-danger-button-text
危险按钮上的文本颜色
--color-form-base
表单元素强调颜色
最后更新于
这有帮助吗?