第三十五章 主题切换与手机版
主题决定长相、手机版决定窄屏用哪套 HTML;换主题的两种方式、手机版的三层机制与切换后没变化的原因。
这一章解决什么
主题(模板)决定站点长什么样;手机版决定窄屏时用哪一套 HTML。本站用的是一套响应式主题:同一个模板,靠 CSS 断点适配手机,没有单独的移动端页面。理解「主题切换」与「手机版开关」是两件事,能省掉很多误判。
| 概念 | 在哪 | 管什么 |
|---|---|---|
| 主题 | theme/<目录名>/ | HTML 模板、CSS、JS、图片 |
| 当前主题 | andvar.asp 里的 theme_root | 前台用哪个目录渲染 |
| 模板绑定 | category.cate_list / cate_show | 某个栏目用哪个模板文件 |
| 手机版开关 | 设置 → 站点设置 → 手机版 | 是否按 UA 启用手机版逻辑(ismobile 变量) |
| 响应式 | ju7.css 的媒体查询 | 窄屏布局,与实际开关无关,始终生效 |
主题目录里有什么
| 路径 | 内容 |
|---|---|
theme/576so/config.xml | 主题元数据:名称、适用终端、语言、网址、日期、缩略图。模板管理列表就靠它显示 |
theme/576so/index1.html | 首页模板 |
theme/576so/head1.html foot1.html | 页头、页脚公共片段 |
theme/576so/seo/head.html | 全站 meta 与资源引用 |
theme/576so/model/list/ | 列表模板:WZ1、WX1、XT1、ZX1、FW1、AL1、HZ1、LX1、Key1、PJ1、Ju7CMS1 等 |
theme/576so/model/show/ | 详情页模板 |
theme/576so/model/page/ search/ 404/ password/ | 单页、搜索、404、密码页模板 |
theme/576so/model/diy/ | DIY 版块模板 |
theme/576so/css/js/images/favicon | 静态资源 |
文件名里的 1 是语言 ID:index1.html 给中文,index2.html 给第二个语言。模板里写 head[langid].html,编译时自动换成对应编号。
换主题的两种方式
后台:功能 → 模板管理。列表里每个主题后面有两种操作,含义完全不同:
| 操作 | 改什么 | 不改什么 | 什么时候用 |
|---|---|---|---|
| 仅换版面 | 只把 theme_root 指向新主题,再清模板缓存 | 数据库、上传文件、区块全部原样 | 只想要新外观,内容继续用现在的 |
| 整站回灌 | 用主题自带的 update.xml 覆盖 upfile/ 与 block/;包里带库时还会覆盖数据库 | 主题目录本身 | 把一套做好的演示站整体搬过来 |
「整站回灌」会覆盖上传目录与区块,带库的包还会覆盖正式数据库。执行前系统会先把正式库复制成 data\databackup\pre-apply-<时间>.bak,并把原 upfile/、block/ 改名留档(upfile-preapply-*、block-preapply-*)。即使有留档,这也是破坏性操作——确认包是对的再点。
回灌前有六道拦截,任何一条不满足就中止且不改数据:
- 主题目录里没有
update.xml; - 包小于 512 字节(上次备份被超时打断的空壳);
- 包无法解析成 XML;
- 包内存在非法落盘路径(如
..\); - 磁盘剩余空间放不下包内数据;
- 正式库
data\#Andvar_com.mdb找不到,或备份目录建不出来、库复制失败。
切换后为什么没变化
- 缓存。切换动作会清
cache/theme/、cache/mobile/与整页缓存。若浏览器还拿着旧 HTML,强刷一次。 - 栏目绑定了具体模板。
category.cate_list写了model/list/WZ1.html的栏目,换主题后仍在新主题目录里找同名文件;新主题没有这个文件就 404。换主题前先确认栏目模板在新主题里都存在。 theme_root没写进去。配置文件被占用或只读时,页面会提示「theme_root 未能写入配置文件」,此时前台仍是旧主题。
手机版:三层机制
第一层:响应式 CSS(始终生效)
ju7.css 用媒体查询处理窄屏:导航收成抽屉、两栏变一栏、章节页收起左侧目录、表格允许横向滚动。这一层与后台开关无关,任何设备都按视口宽度套用。验证时把浏览器宽度调到 375 px,而不是只看桌面。
第二层:手机版开关(决定 ismobile)
设置 → 站点设置里有两项:
| 配置键 | 含义 | 打开后 |
|---|---|---|
mobile | 手机版 | 按 User-Agent 判断手机;命中时 ismobile=true,静态模式会退回动态地址 |
ismobile | 手机版调试 | 强制所有请求都当手机,方便在电脑上测 |
UA 判断是一张关键词表:android、phone、ipod、mqqbrowser、blackberry、nokia、windowsce、symbian、lg、ucweb、skyfire、webos、incognito、mobile,命中任意一个即为手机。iPad 不在表里,会被当桌面;要覆盖就加关键词或改用调试开关。
本站当前两项都未开启(config 表里没有这两行),所以 ismobile 恒为假,页面地址不会因手机而改变;版面适配完全由响应式 CSS 负责。分站目录 /LINHAI/ 等与手机开关无关。
第三层:手机专用字段与图片
字段管理里可以给内容加带 _m 后缀的列(如 pic_m、fileurl_m、catepic_m)。详情页取值时,如果 _m 列有值且当前是手机,就用它覆盖同名字段。这与「手机版开关」无关:图片选择走的是独立的 UA 判断(pic_ismobile),所以即使开关没开,手机访客仍可能拿到窄图。
表格/列表里的 {$rs[catepic]}、{$rs[fileurl]} 会自动在 pcatepic/mcatepic、pfileurl/mfileurl 之间切换,模板不用自己写判断。
测手机版的最小流程
- 把浏览器宽度拖到 375 px,刷新首页、一个列表页、一个详情页,确认没有横向滚动条。
- 展开导航抽屉,确认一级项第一下只展开、第二下才跳转(本站已按此口径改过)。
- 打开一篇正文含表格、含代码块的文章,确认表格在窄屏内可横向滑动,代码块不撑破版面。
- 用手机 UA 的请求头抓一次 HTML,确认
_m图片字段被选中(如果该栏配了手机图)。 - 后台也用 375 px 走一遍:栏目列表、内容编辑、上传弹窗。
接下来怎么读
- 模板文件怎么分工:第二十七章。
- 列表与详情模板的内部结构:第二十九章、第三十章。
- 改了模板不生效的完整排查:第三十三章。
微信扫码聊需求