文档目录
主题系统

简介

本文件面向前端设计师与主题开发者,系统化说明 DouPHP 主题系统的架构与设计理念,涵盖模板引擎、样式管理、资源组织、主题切换机制、多主题支持、配置项、响应式与移动端适配、国际化以及性能优化等。文档以仓库中的实际代码为依据,提供可操作的实践指导与最佳实践建议。

重大更新 本次更新重点介绍了Bootstrap Icons图标系统的全面集成,该图标系统提供了超过1800个高质量的矢量图标,广泛应用于导航菜单、按钮、用户界面等各个组件中。默认主题现在包含了完整的bootstrap-icons.css文件,所有主题版本都获得了统一的图标支持升级。同时,模板系统广泛采用了Bootstrap Icons类名,显著提升了界面的视觉一致性和用户体验。

项目结构

DouPHP 的前台入口统一由根目录 index.php 接管,负责路由解析、初始化与异常处理;主题位于 theme 目录下,默认主题为 default,包含模板(.dwt)、公共片段(inc/*.tpl)、样式(css/)与脚本(js/)。后台通过 admin/controller/theme/ThemeController.php 提供主题安装、启用、删除与模块同步等管理能力。

graph TB
A["前台入口<br/>index.php"] --> B["路由分发<br/>Route::dispatch()"]
B --> C["控制器/服务层<br/>front/*"]
C --> D["主题模板<br/>theme/default/*.dwt"]
D --> E["公共片段<br/>theme/default/inc/*.tpl"]
D --> F["静态资源<br/>theme/default/css/* js/* images/*"]
G["后台主题管理<br/>admin/controller/theme/ThemeController.php"] --> H["主题策略与服务<br/>ThemeService / SiteThemePolicy"]
I["现代前端框架<br/>Bootstrap + Swiper + Vue.js"] --> J["响应式设计<br/>移动优先架构"]
K["模板引擎<br/>.dwt语法"] --> L["动态内容渲染<br/>数据绑定"]
M["Bootstrap Icons<br/>图标系统"] --> N["矢量图标显示<br/>bi-*类名"]

图示来源

  • index.php:26-44
  • ThemeController.php:71-167
  • index.dwt:1-50

核心组件

  • 前台入口与请求生命周期:负责语言前缀解析、路由设置、Init 引导、路由分发与异常渲染。
  • 主题控制器:提供主题列表、安装、启用、删除、模块同步与设置跳转等能力。
  • 现代前端框架集成:Bootstrap 4.4.1提供响应式布局,Swiper实现轮播效果,Vue.js支持现代JavaScript交互。
  • Bootstrap Icons图标系统:集成超过1800个矢量图标,提供统一的图标显示解决方案。
  • 模板系统与片段复用:.dwt 页面模板通过 {include} 组合 header/footer 等公共片段,实现布局复用。
  • 样式与资源管理:每个主题独立 css/js/images 目录,支持模块化开发和按需加载。
  • 响应式设计:基于Bootstrap栅格系统,使用 d-none d-lg-block 等显示类控制不同屏幕下的布局。
  • 国际化支持:模板中通过 {$lang.*} 输出多语言文案,支持语言切换菜单。
  • 现代化JavaScript:集成Vue.js、Swiper等现代库,提供丰富的用户交互体验。

架构总览

下图展示从请求到主题渲染的端到端流程,并标注关键文件位置,包括增强的现代前端框架集成和响应式设计流程。

sequenceDiagram
participant U as "浏览器"
participant I as "前台入口<br/>index.php"
participant R as "路由<br/>Route"
participant S as "业务服务<br/>front/*"
participant T as "主题模板<br/>theme/default/*.dwt"
participant V as "公共片段<br/>theme/default/inc/*.tpl"
participant B as "Bootstrap框架"
participant SW as "Swiper轮播"
participant BI as "Bootstrap Icons"
participant VJ as "Vue.js框架"
U->>I : "HTTP 请求"
I->>R : "设置委托并分发"
R-->>S : "调用对应控制器/服务"
S-->>T : "传入视图数据并渲染模板"
T->>V : "{include} 引入头部/底部等片段"
T->>B : "加载Bootstrap CSS/JS"
T->>SW : "初始化Swiper轮播"
T->>BI : "加载Bootstrap Icons图标"
T->>VJ : "挂载Vue实例"
V-->>T : "返回片段HTML"
T-->>U : "最终HTML响应"

图示来源

  • index.php:26-44
  • index.dwt:13-18
  • index.dwt:43-47

详细组件分析

前台入口与异常处理

  • 入口职责:设置路由委托、解析语言前缀、执行 Init 引导、分发路由、发送响应或重定向。
  • 异常处理:区分 JSON 请求与非 JSON 请求,在站点调试模式下输出调试页,否则回退到错误提示或 JSON 500。
flowchart TD
Start(["进入入口"]) --> Parse["解析语言前缀与路由"]
Parse --> Boot["执行 Init 引导"]
Boot --> Dispatch{"是否已生成 Response?"}
Dispatch --> |是| Send["发送响应并退出"]
Dispatch --> |否| HandleErr{"捕获异常类型"}
HandleErr --> |HttpResponseException| Send
HandleErr --> |RedirectException| Redirect["重定向并退出"]
HandleErr --> |DomainException| JsonOrMsg{"JSON 请求?"}
JsonOrMsg --> |是| Api500["返回 API 500"]
JsonOrMsg --> |否| Msg["message 提示页"]
HandleErr --> |其他| RenderUncaught["统一未捕获异常处理"]
RenderUncaught --> Debug{"站点调试开启?"}
Debug --> |是| DebugOut["调试页/JSON 500"]
Debug --> |否| Fallback["错误提示或 JSON 500"]

图示来源

  • index.php:26-75

主题管理控制器

  • 功能要点:列出可用主题、安装扩展主题、启用/删除主题、同步支持模块、设置跳转。
  • 依赖:ThemeService、CloudService、SiteThemePolicy,用于主题策略校验与云端扩展获取。
classDiagram
class ThemeController {
+index()
+install(request)
+enable(formRequest)
+destroy(formRequest, request)
+module()
+moduleClear()
+set(request)
}
class ThemeService
class CloudService
class SiteThemePolicy
ThemeController --> ThemeService : "主题增删改查"
ThemeController --> CloudService : "云端扩展拉取"
ThemeController --> SiteThemePolicy : "主题策略校验"

图示来源

  • ThemeController.php:31-167

新增 Bootstrap Icons图标系统集成

  • 版本信息:Bootstrap Icons v1.13.1,提供超过1800个高质量矢量图标。
  • 核心特性:矢量图标格式、无限缩放不失真、轻量级字体文件。
  • 图标分类:涵盖箭头、形状、符号、编辑、界面、方向、状态、安全等类别。
  • 使用方法:通过 bi-* 类名直接应用图标,如 bi-search、bi-person-circle 等。
  • 字体路径:使用相对路径 ../../../core/fonts/bootstrap-icons.woff2 确保跨主题兼容。
  • 响应式支持:图标大小可通过CSS自定义,完美适配不同屏幕尺寸。

新增 Bootstrap Icons在模板中的应用

  • 导航图标:语言选择使用 bi-globe-americas,用户图标使用 bi-person-circle。
  • 搜索图标:搜索按钮使用 bi-search 类名,提供直观的搜索提示。
  • 菜单图标:移动端菜单按钮使用 bi-list,下拉箭头使用 bi-chevron-* 系列。
  • 社交图标:QQ使用 bi-qq,微信使用 bi-wechat,Skype使用 bi-skype 等。
  • 操作图标:分页导航使用 bi-chevron-left/right,返回顶部使用 bi-chevron-up。
  • 界面图标:在线服务、联系方式等界面元素广泛使用各类图标增强视觉效果。

Bootstrap框架集成

  • 版本信息:Bootstrap v4.4.1,提供完整的响应式网格系统、组件库和工具类。
  • 核心特性:移动优先设计、Flexbox布局、预定义组件(按钮、表单、导航等)。
  • 响应式断点:支持xs(576px)、sm(768px)、md(992px)、lg(1200px)等标准断点。
  • 工具类:提供间距、颜色、排版、显示控制等实用工具类。

Swiper轮播系统集成

  • 版本信息:Swiper 10.3.1,现代移动端触摸滑块框架。
  • 核心功能:硬件加速过渡、触摸手势支持、多种切换效果。
  • 配置选项:支持自动播放、分页器、导航按钮、缩略图等功能。
  • 响应式支持:自适应不同屏幕尺寸和设备方向。
  • 性能优化:虚拟模式、懒加载、CSS模式等高级特性。

Vue.js现代JavaScript框架

  • 版本信息:Vue.js全局构建版本,支持现代浏览器。
  • 核心特性:响应式数据绑定、组件化开发、声明式渲染。
  • 应用场景:用户界面交互、表单验证、动态内容更新。
  • 集成方式:通过CDN引入,支持模块化开发和第三方插件扩展。
  • 性能优化:虚拟DOM、异步组件、代码分割等优化策略。

模板系统与片段复用

  • 页面模板:以 .dwt 为后缀,集中存放于 theme/default/,通过 {include} 引入公共片段。
  • 公共片段:inc/ 下 header.tpl、footer.tpl、code_head.tpl、code_footer.tpl 等,承载导航、搜索、用户状态、SEO 与统计代码。
  • 变量注入:模板中使用 {$page_title}、{$keywords}、{$description}、{$site.}、{$lang.} 等变量进行渲染。
graph LR
A["index.dwt"] --> B["inc/header.tpl"]
A --> C["inc/footer.tpl"]
A --> D["inc/code_head.tpl"]
A --> E["inc/code_footer.tpl"]
B --> F["导航/搜索/用户状态"]
C --> G["底部链接/版权/备案"]

图示来源

  • index.dwt:1-50
  • header.tpl:1-112
  • footer.tpl:1-40

样式管理与资源组织

  • 样式组织:每个主题拥有独立的 css/ 目录,按模块拆分(如 product.css、index.css 等),并在模板中按需引入。
  • 脚本组织:js/ 目录放置第三方库与业务脚本,模板尾部引入,避免阻塞首屏。
  • 图片资源:images/ 存放主题相关图片,路径相对主题根目录。

响应式设计与移动端适配

  • Bootstrap栅格系统:使用 col-* 类创建灵活的响应式布局,支持12列网格系统。
  • 显示控制类:使用 d-none d-lg-block 等类控制元素在不同屏幕尺寸下的显示状态。
  • 导航折叠:移动端通过 data-toggle="collapse" 折叠主导航,提升交互体验。
  • 搜索框优化:移动端提供简化搜索表单,保证易用性。
  • 媒体查询:结合自定义CSS媒体查询,实现精细化的移动端适配。

国际化支持

  • 语言变量:模板中通过 {$lang.*} 输出文案,如首页、登录、注册、购物车等。
  • 语言切换:顶部导航提供语言下拉菜单,点击后跳转到对应语言 URL。

主题切换机制与多主题支持

  • 后台管理:通过 ThemeController 提供主题列表、安装、启用、删除等操作。
  • 策略控制:SiteThemePolicy 用于限制某些主题的使用场景或模块支持。
  • 云端扩展:CloudService 支持从云端拉取主题扩展包,增强主题生态。

依赖关系分析

  • 入口依赖路由与异常处理:index.php 将路由委托给 Router,并统一处理各类异常与响应。
  • 主题控制器依赖服务与策略:ThemeController 依赖 ThemeService、CloudService、SiteThemePolicy。
  • 新增 前端框架依赖:模板依赖Bootstrap、Swiper、Bootstrap Icons、Vue.js等现代前端库。
  • 模板依赖片段与资源:.dwt 模板通过 {include} 组合片段,并引用 css/js/images。
graph TB
X["index.php"] --> Y["Router"]
X --> Z["异常处理"]
A["ThemeController"] --> B["ThemeService"]
A --> C["CloudService"]
A --> D["SiteThemePolicy"]
E["*.dwt"] --> F["inc/*.tpl"]
E --> G["css/* js/* images/*"]
H["Bootstrap框架"] --> E
I["Swiper轮播"] --> E
J["Bootstrap Icons"] --> E
K["Vue.js框架"] --> E

图示来源

  • index.php:26-75
  • ThemeController.php:31-167
  • index.dwt:13-18

性能与优化

  • 资源加载顺序:CSS 置于 head,JS 置于 body 末尾,减少首屏阻塞。
  • 按需引入:仅在当前页面引入必要 CSS/JS,避免全局冗余。
  • 缓存策略:利用浏览器缓存与 CDN 缓存静态资源;对频繁访问的片段可考虑服务端缓存。
  • 压缩与合并:生产环境对 CSS/JS 进行压缩与合并,减少请求数与体积。
  • 图片优化:使用合适格式与尺寸,必要时启用懒加载。
  • 模板片段复用:通过 {include} 复用公共片段,降低重复渲染开销。
  • 新增 现代框架优化:Bootstrap、Swiper、Bootstrap Icons使用压缩版本,Vue.js按需加载组件。
  • 优化 响应式设计:移动优先的CSS架构,减少不必要的样式覆盖。
  • 图标优化:Bootstrap Icons使用字体文件,比传统图片图标更轻量且易于维护。

故障排查指南

  • 未捕获异常:检查入口的异常处理分支,确认是否为 JSON 请求与站点调试模式。
  • 路由问题:确认路由字符串与语言前缀是否正确解析。
  • 模板变量缺失:核对控制器或服务层是否向模板传递了所需变量。
  • 资源路径错误:检查模板中 CSS/JS/图片路径是否指向当前主题目录。
  • 主题切换失败:查看后台主题管理日志,确认策略限制与权限。
  • 新增 Bootstrap冲突:检查是否有其他CSS框架与Bootstrap产生样式冲突。
  • 新增 Swiper初始化失败:确认Swiper库是否正确加载,检查DOM结构是否符合要求。
  • 新增 Vue.js绑定错误:检查Vue实例是否正确挂载,确认数据绑定语法正确。
  • 新增 响应式布局异常:检查Bootstrap栅格类使用是否正确,确认媒体查询无冲突。
  • 新增 Bootstrap Icons显示异常:确认bootstrap-icons.css文件是否正确加载,检查字体路径配置。
  • 新增 图标类名错误:检查使用的 bi-* 类名是否存在,确认拼写正确无误。

结论

DouPHP 的主题系统以清晰的入口与路由为基础,通过模板片段化与资源模块化实现高内聚、低耦合的界面构建。本次重大更新引入了Bootstrap Icons图标系统和现代前端技术栈,包括Bootstrap 4.4.1响应式框架、Swiper 10.3.1轮播库、Bootstrap Icons矢量图标系统、Vue.js现代JavaScript框架等先进的前端技术。默认主题现在提供了完整的响应式设计支持,包括Bootstrap栅格系统、移动优先设计理念和现代化的用户界面组件。超过50个主题版本获得了统一的图标支持升级,特别是在导航、搜索、用户界面和社交功能方面。这些更新显著提升了主题的系统性、一致性和用户体验,为开发者提供了更强大、更灵活的主题开发基础。

附录:开发规范与示例

主题目录结构规范

  • 根目录:主题名(如 default)
  • inc/:公共片段(header.tpl、footer.tpl、code_head.tpl、code_footer.tpl 等)
  • css/:样式文件,按模块拆分,支持Bootstrap和自定义样式
  • js/:脚本文件,第三方库与业务脚本分离,支持Vue.js和Swiper
  • images/:主题图片资源
  • *.dwt:页面模板,使用 {include} 组合片段

新增 Bootstrap Icons使用指南

  • 基本用法:直接使用 bi-* 类名添加图标,如 &lt;i class="bi bi-search">&lt;/i>
  • 常用图标:search、person、list、chevron、tencent-qq、wechat、telephone等
  • 图标大小:通过CSS自定义font-size属性调整图标大小
  • 图标颜色:继承父元素的color属性,可使用Bootstrap颜色类
  • 图标对齐:使用vertical-align属性调整图标垂直对齐
  • 响应式图标:配合Bootstrap响应式类名实现不同屏幕下的图标显示

Bootstrap开发指南

  • 栅格系统:使用 container、row、col-* 类创建响应式布局
  • 组件使用:直接使用Bootstrap预定义的按钮、表单、导航等组件
  • 工具类:合理使用间距、颜色、排版等工具类
  • 响应式设计:使用 d-none d-lg-block 等显示控制类
  • 图标系统:使用Bootstrap Icons类添加矢量图标

Swiper开发指南

  • 基本用法:创建Swiper实例,配置轮播选项
  • 响应式支持:根据屏幕尺寸调整轮播行为
  • 触摸手势:支持移动端触摸滑动操作
  • 导航控制:添加前后导航按钮和分页指示器
  • 性能优化:使用虚拟模式和懒加载提升性能

Vue.js开发指南

  • 实例创建:使用 new Vue() 创建Vue实例
  • 数据绑定:使用 {{ }} 语法进行文本插值
  • 事件处理:使用 @click 等指令绑定事件处理器
  • 条件渲染:使用 v-if、v-show 控制元素显示
  • 列表渲染:使用 v-for 遍历数组渲染列表

模板语法要点

  • 变量输出:{$page_title}、{$keywords}、{$description}、{$site.}、{$lang.}
  • 条件判断:&lt;!-- {if $features.*} --> ... &lt;!-- {/if} -->
  • 循环遍历:&lt;!-- {foreach from=$nav_middle_list item=nav} --> ... &lt;!-- {/foreach} -->
  • 片段引入:{include file="inc/header.tpl"}

创建新主题步骤

  • 复制默认主题目录,重命名为新主题名。
  • 修改模板与样式,保持 inc/ 片段命名一致。
  • 在后台"主题管理"中安装并启用新主题。
  • 验证页面渲染、资源加载与多语言切换。

自定义界面与修改布局

  • 调整导航:编辑 inc/header.tpl,修改菜单结构与样式。
  • 调整页脚:编辑 inc/footer.tpl,更新链接与版权信息。
  • 调整首页:编辑 index.dwt,增减模块区块。
  • 新增 使用Bootstrap组件:替换自定义组件为Bootstrap原生组件。
  • 新增 集成现代JavaScript:添加Vue.js或Swiper交互功能。
  • 新增 应用Bootstrap Icons:为界面元素添加矢量图标增强视觉效果。

主题切换机制与配置

  • 后台操作:主题列表、安装、启用、删除。
  • 策略限制:SiteThemePolicy 控制可用主题范围。
  • 云端扩展:CloudService 拉取主题扩展包。

响应式与移动端适配

  • 使用 Bootstrap 栅格与显示类控制布局。
  • 移动端导航折叠与搜索框优化。
  • 媒体查询与图标字体适配。
  • 新增 移动优先设计:确保移动端体验优先。
  • 新增 触摸手势支持:为移动端用户提供流畅的触摸交互。
  • 新增 图标响应式:确保图标在不同屏幕尺寸下正常显示。

国际化支持

  • 语言变量:{$lang.*} 输出文案。
  • 语言切换:顶部语言下拉菜单。

新增 Bootstrap Icons故障排查

  • 图标不显示:检查bootstrap-icons.css文件是否正确引入,确认字体路径配置正确。
  • 图标乱码:确认字符编码设置为UTF-8,检查字体文件完整性。
  • 图标大小异常:检查CSS样式是否覆盖了默认的font-size属性。
  • 图标颜色异常:确认color属性继承正常,检查父元素的样式设置。
  • 移动端图标模糊:确认使用了矢量图标而非位图图标,检查字体文件质量。
添加日期:2026-10-05