主题目录结构 Theme Structure
一个前台主题就是站点根目录下的 theme/<主题名>/ 目录,前台模板引擎的模板根目录即该目录。当前生效主题由站点配置 site.site_theme 决定,在后台「模板」页面启用 / 切换。
一、目录布局
theme/<主题名>/
├── css/ 样式(style.css 必需:主题元数据 + 全站样式)
├── js/ 脚本
├── images/ 图片(screenshot.png 为主题列表预览图)
├── inc/ 公共片段与主题扩展脚本
│ ├── header.tpl 公共头
│ ├── footer.tpl 公共尾
│ ├── code_head.tpl head 结束前插入点(全站自定义代码)
│ ├── code_footer.tpl body 结束前插入点
│ ├── ..from_theme.php 主题数据装配脚本(可选)
│ └── ..setting.php 主题尺寸声明(可选)
├── index.dwt 首页
├── <模块名>.dwt 模块详情 / 单页
├── <模块名>_category.dwt 栏目模块分类列表页
├── <模块名>_user.dwt 会员中心子页
├── <模块名>_work.dwt 工作人员端子页
├── dou_msg.dwt 系统提示页
├── search.dwt 搜索结果页
└── page.dwt / landing.dwt 其它内置页面
二、模板文件与页面命名约定
模板文件由前台控制器通过 view('xxx.dwt', $data) 指定,主题侧只要提供同名文件即可:
| 页面 | 模板文件 | 示例 |
|---|---|---|
| 首页 | index.dwt |
— |
| 栏目模块详情 | <模块名>.dwt |
article.dwt / product.dwt |
| 栏目模块分类列表 | <模块名>_category.dwt |
article_category.dwt |
| 简单模块单页 | <模块名>.dwt |
brand.dwt / team.dwt |
| 会员中心子页 | <模块名>_user.dwt |
book_user.dwt |
| 工作人员端子页 | <模块名>_work.dwt |
book_work.dwt |
| 系统提示页 | dou_msg.dwt |
— |
补充约定:
- 模板文件扩展名白名单:
.tpl/.htm/.html/.dwt;{include}的资源名禁止包含..或绝对路径; - 公共片段放
inc/*.tpl,用{include file="inc/header.tpl"}引入; - 静态资源写相对路径(
css/style.css、images/logo.png),前台预过滤器会烘焙为绝对主题路径; - 可用 HTML 注释包裹标签(写为 HTML 注释形式的
{if ...}),渲染时注释会被还原,便于模板直接用浏览器预览; - 链接推荐用
{url link='模块.动作'}标准写法。
三、主题元数据与预览图
后台主题列表会扫描 theme/ 下所有子目录,读取其 css/style.css(兼容旧位置根目录 style.css)头部注释作为主题信息:
/*
Theme Name: 我的主题
Theme URI: https://example.com/
Description: 主题描述
Version: 1.0
Author: 作者
Author URI: https://example.com/
*/
解析规则:含 /* 的行跳过,遇到 */ 行结束;中间每行按 键: 值 解析,键会转成小写、空格转下划线(Theme Name → theme_name)。预览图固定取 images/screenshot.png。
四、启用主题的三件事
在后台启用 / 切换主题时,系统会:
- 主题目录内缺失的文件,从
theme/default自动补齐(已存在的文件不覆盖); - 商业主题目录名遵循
m001~m999(正则^m\d{3}$):未授权且为正式域名时自动回退到default; - 清理模板编译缓存。
五、制作主题的推荐流程
- 复制
theme/default作为起点; - 目录命名:普通主题任意合法目录名,商业主题用
m001~m999; - 编写
css/style.css元数据注释,放入images/screenshot.png预览图; - 按命名约定编写
*.dwt模板与inc/*.tpl公共片段; - 需要「跟随路由」的数据装配 → 增加
inc/..from_theme.php; - 需要后台图片尺寸提示 → 增加
inc/..setting.php; - 需要自定义文案 → 在对应语言包目录增加
*.lang.php; - 后台「模板」页面启用主题,逐页回归验证。