第三十五章 主题切换与手机版

Ju7CMS 用户手册 · 发布于 2026-10-27 · 更新于 2026-10-27

主题决定长相、手机版决定窄屏用哪套 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-*)。即使有留档,这也是破坏性操作——确认包是对的再点。

回灌前有六道拦截,任何一条不满足就中止且不改数据:

  1. 主题目录里没有 update.xml;
  2. 包小于 512 字节(上次备份被超时打断的空壳);
  3. 包无法解析成 XML;
  4. 包内存在非法落盘路径(如 ..\);
  5. 磁盘剩余空间放不下包内数据;
  6. 正式库 data\#Andvar_com.mdb 找不到,或备份目录建不出来、库复制失败。

切换后为什么没变化

  1. 缓存。切换动作会清 cache/theme/、cache/mobile/ 与整页缓存。若浏览器还拿着旧 HTML,强刷一次。
  2. 栏目绑定了具体模板。category.cate_list 写了 model/list/WZ1.html 的栏目,换主题后仍在新主题目录里找同名文件;新主题没有这个文件就 404。换主题前先确认栏目模板在新主题里都存在。
  3. 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 之间切换,模板不用自己写判断。

测手机版的最小流程

  1. 把浏览器宽度拖到 375 px,刷新首页、一个列表页、一个详情页,确认没有横向滚动条。
  2. 展开导航抽屉,确认一级项第一下只展开、第二下才跳转(本站已按此口径改过)。
  3. 打开一篇正文含表格、含代码块的文章,确认表格在窄屏内可横向滑动,代码块不撑破版面。
  4. 用手机 UA 的请求头抓一次 HTML,确认 _m 图片字段被选中(如果该栏配了手机图)。
  5. 后台也用 375 px 走一遍:栏目列表、内容编辑、上传弹窗。

接下来怎么读

  1. 模板文件怎么分工:第二十七章。
  2. 列表与详情模板的内部结构:第二十九章、第三十章。
  3. 改了模板不生效的完整排查:第三十三章。