1.2 模板套系与模板风格的区别

> 分清「换房子」和「换装修」,别把文件放错地方。

两个词先各下一句定义

模板套系:统一打包成系列的一整类模板,在磁盘上的形态是 template/{identifier}/ 这一个目录,里面有全套的 HTML 文件。

模板风格:沿用某个套系的全部代码、只改动量设置的一套方案。同一个套系下面可以挂多个风格,各自记一套自己的配置。

初学者最常犯的错,是以为这两者是并列关系——好像风格和套系平级,站点二选一。实际上是套系在前、风格在后的一对多:一个套系,多个风格。

一栋楼的不同装修

把站点想象成一栋已经盖好的楼:套系是楼本身——承重结构、户型、水电走向都定死了,改这些要动工程队;风格是装修方案——墙纸、地板、灯具、软装,同一套户型可以有任意多套装修。

对应到实际操作:

你想改的东西 该动哪一层 原因
换 logo 换风格 logo 路径是一个变量,改配置即可
换主色调、字体大小 换风格 配色和字号都是风格变量
换图片目录 换风格 基础图片目录 / 扩展图片目录由风格指定
换一个扩展配色 换风格 style/ 下的配色由风格选择生效
改页面 HTML 结构、增删元素 换套系 结构写在套系的模板文件里
改导航层级、卡片排布 换套系 属于布局改动,风格管不到

结论一句话:改配色改图标改字号,改风格;改结构改布局,改套系。

风格由哪些设置项组成

后台的模板风格设置页里,风格由这样几项构成:

设置项 管什么 模板里怎么取
匹配模板 指定这个风格用哪个套系的 HTML 代码 决定 {IMGDIR} 之外的整套文件来源
扩展配色 在 style/ 下选一份配色 CSS 生效 template/{标识}/style/t1/style.css
默认配色 基础配色方案 决定整体色调基调
界面基础图片目录 图片根路径,如 static/image/common $_G['style']['imgdir']
扩展图片目录 风格专属图片路径 $_G['style']['styleimgdir']
字体大小 基础字号 $_G['style']['fontsize'],如 12px/1.5

注意最后三行在模板里的写法。早期版本用 {IMGDIR}、{STYLEIMGDIR}、{FONTSIZE} 这种花括号常量,但从 X2 之后,模板中要改用 $_G['style'][键名] 的写法:

<img src="<?php echo $_G['style']['imgdir']; ?>/logo.png" alt="logo" />

这条写法的意义在于:常量是编译期替换的,写死成相对路径或绝对路径;换成 $_G['style'] 之后,取值发生在运行时,风格切换才真正生效。如果你发现自己换风格换了半天图片没变,先查这里用的是常量还是 $_G['style']。

扩展 CSS 与扩展配色

风格要好看,光改变量不够,通常还得写点 CSS。Discuz! 为此准备了两套扩展位点:

文件位置 作用
template/{标识}/common/extend_common.css 在默认 common.css 基础上做覆盖式扩展
template/{标识}/common/extend_module.css 在默认 module.css 基础上做覆盖式扩展
template/{标识}/style/t1/style.css 扩展配色,在后台「扩展配色」中选择生效

前两个是「加在后面」的覆盖式扩展,第三个是独立的一套配色。三者都能在不改套系的前提下改变外观,正好对应「风格只改变量」这一定义——CSS 是风格的一部分,不是套系的一部分。

这两个扩展文件不需要你手动去 link 标签里挂,套系的公共模板已经加载了它们,你只要往文件里写覆盖规则就行。以默认套系为例,扩展文件的位置和写法是这样的:

<!-- 逻辑上等价于在公共模板里引一张额外的样式表 -->
<link rel="stylesheet" href="template/xxx/common/extend_common.css" />

xxx 换成你自己的套系标识符。这类覆盖式的关键是选择器要够具体。默认样式表里的规则已经先生效了,你的规则要么选择器权重更高,要么后加载,否则不会生效。写完记得更新缓存再刷页面,否则看到的还是旧样式。

一句话选型流程

拿到一个需求,按顺序问自己三个问题:

  1. 要不要改页面上的元素结构?要 → 换套系。
  2. 不用改结构,只是换个样子?→ 换风格。
  3. 要的根本不是外观,而是换一套布局逻辑或 HTML 写法?→ 换套系。

多数站长需求停在第 2 步,那就在当前套系下多建几个风格切换即可,成本极低。真正需要换套系的信号是:导航要变成侧边栏、列表页要换成卡片瀑布流、页脚结构要重排——这些已经不是配色能解决的了。

和后面章节的衔接

分清了套系和风格,接下来的动作就很明确:想多建几套配色,在同一个套系下建风格;想动 HTML,就在 template/ 下新建一个自己的套系目录。1.3 节会手把手走一遍新建套系的完整流程,1.4 节解决开发时的两个拦路虎——开发者模式开关和缓存更新。