3.2 风格常量与配色方案
> 主色、字号、图片路径改成后台可调项,不动一行模板代码。
套系和风格是两件事
先把两个词分清,后面所有操作都靠它:
- 模板套系:一整套模板代码,目录是
template/{标识}/,换套系等于换掉整个页面的 HTML 结构。 - 模板风格:套用同一套系代码、只改变量设置的方案。同一套系下可以并存多套风格,换风格不换 HTML。
打个比方:套系是房子的户型图,风格是墙纸和窗帘。同一个户型你想挂米色还是灰绿色,不必重新画图,只需要换风格。这一篇讲的全部内容都发生在"风格"这一层,不涉及 HTML 改动。
风格常量:把写死的值变成可配项
Discuz! 把界面里那些"每站不一样"的量抽成一组常量,后台风格页里以 {花括号} 框选展示的那批,都能在模板和 CSS 里直接引用:
| 常量 | 含义 | PHP 侧的对应值 |
|---|---|---|
{IMGDIR} |
界面基础图片目录 | $_G['style']['imgdir'] |
{STYLEIMGDIR} |
扩展图片目录 | $_G['style']['styleimgdir'] |
{FONTSIZE} |
基础字体大小 | 形如 {FONTSIZE}:12px/1.5 |
{BGCOLOR} |
页面背景色 | $_G['style']['bgcolor'] |
{FONTCOLOR} |
文字颜色 | $_G['style']['fontcolor'] |
{LINKCOLOR} |
链接颜色 | $_G['style']['linkcolor'] |
{BORDERCOLOR} |
边框色 | $_G['style']['bordercolor'] |
{LOGO} |
Logo 图片 | $_G['style']['logo'] |
X2 之后模板里不再直接写 {IMGDIR} 这种老写法,取值统一走 $_G['style'],例如:
<img src="{$_G['style'][styleimgdir]}/btn_reply.png" alt="" />
{FONTSIZE} 是最省事的一个,它带的是一整串"字号/行高",所以不能直接塞进属性值,要和字体名拼:
<body style="font:{FONTSIZE} Tahoma,Verdana,sans-serif">
要注意的是:常量只在模板和被模板驱动的样式上下文里生效。写在自己的 .php 业务文件里时,必须用 $_G['style']['xxx'] 取,直接写常量名会当成未定义常量。
两类图片目录别混用
| 目录 | 放什么 | 特点 |
|---|---|---|
界面基础图片目录({IMGDIR}) |
跟随内核版本的图标、按钮、圆角、序号条 | 换套系时要换,默认风格里是 static/image/common |
扩展图片目录({STYLEIMGDIR}) |
你自己的 logo、背景、品牌图 | 属于你的风格,切风格跟着切 |
分界线很清楚:和内核功能绑定的图归 {IMGDIR},和你的品牌绑定的图归 {STYLEIMGDIR}。把自家 logo 塞进基础图片目录,等于让内核目录背你的品牌包袱,换套系时它跟着一起被换掉。
两个路径都在后台 → 界面 → 模板风格里配置,配置完记得更新缓存。
默认配色 vs 扩展配色
配色分两种,作用完全不同:
| 默认配色 | 扩展配色 | |
|---|---|---|
| 文件 | 无独立文件,直接用风格页填的值 | template/{标识}/style/{目录}/style.css |
| 生效条件 | 后台风格页填的变量本身 | 后台在"扩展配色"里选中该目录 |
| 数量 | 一套 | 可并列多套,站点可切换 |
| 适合 | 站点主色调 | 深色/浅色、品牌 A/品牌 B |
扩展配色的写法很简单,就是在目录里放一个 style.css,用上面那些常量把常用色值重新落一遍:
/* template/{标识}/style/t1/style.css */
body { background: #F2F5F8; color: #333333; }
.pg a { color: #2B8FD4; }
.pg a:hover { color: #1B6FB0; }
.wp, .area { border-color: #DDE3E9; }
.t_fsz, .t_fsz14 { font-size: 12px; }
{t1} 只是目录名,可以自己叫 dark、blue、brand-b——习惯上第一个扩展配色用 t1,后面依次 t2、t3。
换配色不改套系:完整操作步骤
想给论坛加一套深色主题,同时保留原来的浅色,流程是这样:
- 复制浅色那套的文件作起点:
cp -r template/你的标识/style/t1 template/你的标识/style/t2; - 改
t2/style.css,只改颜色和字号相关属性,不要碰布局属性(宽度、间距、浮动),那些是套系的事; - 需要为深色单独配图时,把图放进扩展图片目录下的
t2/子目录,别去覆盖t1的; - 后台 → 界面 → 模板风格 → 扩展配色,填
t2(填的是相对套系根目录的路径,不带前导斜杠); - 更新缓存,前台出现切换入口,用户在风格面板里切换。
第 2 步的边界是最容易越的地方。深色不是"把所有颜色反过来",很多站点的深色配色做到最后布局全乱,就是因为顺手在配色文件里调了宽度。配色文件只管颜色。
风格常量用错了的几个症状
| 症状 | 原因 | 处理 |
|---|---|---|
| CSS 里常量原样显示成文字 | 常量写在纯 .css 文件里,而 CSS 文件不经过模板解析 |
在模板里输出一个 style 块,或改用 extend_common.css 里的固定值 |
| 图片 404 | {STYLEIMGDIR} 与 {IMGDIR} 用反了 |
核对后台两个目录配置值 |
| 改了配色不生效 | 扩展配色没选中,或没更新缓存 | 后台重新选择后更新缓存 |
| 不同用户看到不同主色 | 这是正常的,风格面板就是干这个的 | 需要统一就在后台锁定默认风格 |
第三条特别常见。配色文件的加载本身没有独立缓存钩子,改完必须走一次后台的更新缓存,和改模板后的流程一样。
一个小提醒:风格与开发者模式
风格页的一些高级项(比如扩展配色路径、模板变量配置)在开启开发者模式后才完整显示。config/config_global.php 末尾加一行 $_config['plugindeveloper'] = 1; 之后进后台,模板列表会出现"设计"按钮,风格项也会全部露出来。做定制之前先把这行加上,省得你怀疑某个选项不存在。
