前台模板:一次访问是怎么变成页面的
前台每个页面都是「模板 + 数据」拼出来的。本章用本手册列表页的真实代码讲清标签的每个参数,以及改完模板必须清哪一层缓存。
五个环节

- 请求:浏览器要一个地址,例如本手册的列表页。
- 找模板:按栏目上配的「列表模板 / 内容模板」去
theme/站点名/model/list/、model/show/取文件。 - 编译:把模板里的标签翻成 VBScript,结果写进
cache/theme/。 - 取数:标签里的
where拼成 SQL 查库。 - 输出:拼成 HTML;开了整页缓存再存一份到
cache/html/。
最常见的一段标签
下面这段就是本手册列表页侧栏的真实写法,去掉注释后所有模板里的取数标签都长这样:
{andvar:rs field="id,classid,title,ordnum" top="60" table="content" where="classid in([sonid]) and islock=1" order="ordnum,id"} {if $rs[ordnum]=1}一 · 入门与环境{/if} <a href="{$rs[link]}">{$rs[title]}</a>{/andvar:rs}| 参数 | 含义 | 写错的后果 |
|---|---|---|
field | 要查的列,逗号分隔 | 漏写的列取出来是空:链接变空 href,页面仍然 200,最难查 |
top | 最多取几条 | 写小了列表缺条 |
table | 查哪张表 | 查栏目表时主键是 cateid,不是 id |
where | 过滤条件,可用当前栏目变量 | [sonid] 是「本栏目及其子栏目」;比较运算要用当前行的列名 |
order | 排序,可写 ordnum,id desc | 不写就按入库顺序,改排序号没效果 |
{$rs[link]} | 这一行的地址 | 查 category 表时必须带上语言字段,否则链接是空的 |
样式改在哪里
- 前台样式在
theme/站点名/css/里,模板内嵌的<style>会被主样式表覆盖,不要把样式写在模板里。 - 主样式表通过一个版本号引用(地址尾巴上的
?v=)。改完 CSS 必须同时改这个版本号,否则访客的浏览器还在用旧文件。 - 改模板或改
theme/下任何文件后,要清cache/theme/,见第二十三章。
「功能 → 模板管理」可以直接编辑模板文件,界面上也有预览。它是前台整站的源码:改错一行,前台可能整页 500。改之前先把那个文件复制一份存到站点外,改完立刻看前台。
只想改一处文字
先分清它在哪:内容里的字 → 后台改内容;导航上的字 → 栏目名称;页脚/页头的固定文字 → 模板;按钮、提示、后台界面 → 后台的静态外壳文件。四处对应四个完全不同的改动路径。
