📖 项目概述
模板系统介绍
飞鸟阅读采用基于ThinkPHP6的模板系统,支持PC端和移动端双端适配。模板系统具有以下特点:
- 双端支持:独立的PC端和移动端模板
- 模块化设计:组件化的模板结构
- 继承机制:基于base.html的模板继承
- 静态资源管理:规范的CSS/JS/图片管理
- SEO优化:内置SEO功能支持
技术栈
技术 | 版本 | 用途 | 说明 |
---|---|---|---|
ThinkPHP模板引擎 | 6.1 | 模板渲染 | 支持继承、包含、变量输出等功能 |
Bootstrap | 5.x | PC端UI框架 | 响应式布局与组件 |
BUI | 1.x | 移动端UI框架 | 移动端专用组件库 |
jQuery | 3.6.2 | JavaScript库 | DOM操作与AJAX |
Layui | 2.x | UI组件 | 弹层、表单等组件 |
模板类型
PCPC端模板
位于 /template/default_pc/
,适配桌面端浏览器,使用Bootstrap框架
MOBILE移动端模板
位于 /template/default_mobile/
,适配移动端浏览器,使用BUI框架
📁 目录结构
模板目录总览
template/
├── default_pc/ # PC端模板
│ ├── common/ # 公共模板组件
│ │ ├── base.html # 基础模板
│ │ ├── header.html # 页头组件
│ │ ├── footer.html # 页脚组件
│ │ ├── comment.html # 评论组件
│ │ └── usermenu.html # 用户菜单
│ ├── index/ # 首页模板
│ │ └── index.html
│ ├── book/ # 书籍相关页面
│ │ ├── detail.html # 书籍详情
│ │ ├── cate.html # 分类页面
│ │ ├── list.html # 书籍列表
│ │ ├── quanben.html # 完本专区
│ │ └── rank.html # 排行榜
│ ├── chapter/ # 章节页面
│ │ └── detail.html # 章节详情
│ ├── author/ # 作者页面
│ │ └── detail.html # 作者详情
│ ├── user/ # 用户中心
│ ├── search/ # 搜索页面
│ ├── login/ # 登录注册
│ ├── bookshelf/ # 书架
│ ├── info/ # 信息页面
│ ├── pages/ # 单页面
│ ├── article/ # 文章
│ ├── 404.html # 404错误页面
│ ├── copyright.xml # 版权信息
│ └── cover.jpg # 模板封面
└── default_mobile/ # 移动端模板
├── common/ # 公共组件
├── index/ # 首页
├── book/ # 书籍页面
├── chapter/ # 章节
├── author/ # 作者
├── user/ # 用户中心
├── search/ # 搜索
├── login/ # 登录
├── bookshelf/ # 书架
├── pay/ # 支付
├── vip/ # VIP
├── 404.html # 404页面
├── copyright.xml # 版权信息
└── cover.jpg # 模板封面
静态资源结构
public/static/
├── assets/ # 公共资源
│ ├── init/ # 初始化资源
│ └── layui/ # Layui组件
├── font-awesome/ # 字体图标
├── bui/ # BUI框架(移动端)
│ ├── css/
│ └── js/
├── home/ # PC端资源
│ ├── style/ # 样式文件
│ ├── script/ # 脚本文件
│ ├── image/ # 图片资源
│ ├── fonts/ # 字体文件
│ └── js/ # 其他JS库
└── mobile/ # 移动端资源
└── default/
├── css/ # 移动端样式
├── js/ # 移动端脚本
└── image/ # 移动端图片
重要提示:模板中的public目录下的内容会复制到站点根目录的public目录下,用于可访问的静态资源。
⚙️ 模板引擎语法
基础语法
模板继承
{extend name="common/base"/}
所有页面模板都应继承自基础模板,实现统一的布局结构。
区块定义
{block name="title"} <title>页面标题</title> {/block} {block name="style"} <link rel="stylesheet" href="custom.css"> {/block} {block name="body"} 页面主体内容 {/block} {block name="script"} <script>页面脚本</script> {/block}
包含文件
{include file="common/header" nav='index' /} {include file="common/footer" /} {include file="common/comment" /}
变量输出
基本输出
{$book.title} // 书籍标题 {$book.author} // 作者名称 {$book.remark|raw} // 原始HTML输出
函数调用
{:url('book_detail',['id'=>$book.id])} // URL生成 {:get_file($book.cover)} // 文件路径 {:time_format($book.create_time,'Y-m-d')} // 时间格式化 {:wordCount($book.words)} // 字数统计 {:dsubstr($book.title,20)} // 字符串截取
SEO函数
{:get_seo_str('book','book_title','',['bookid'=>$bid])} // SEO标题 {:get_seo_str('book','book_keywords','',['bookid'=>$bid])} // SEO关键词 {:get_seo_str('book','book_description','',['bookid'=>$bid])} // SEO描述
条件判断
{notempty name="$book"} 书籍存在时显示的内容 {else/} 书籍不存在时显示的内容 {/notempty} {eq name="$book.isfinish" value="2"} 完结 {else/} 连载 {/eq} {if condition="$book.vip == 1"} VIP章节 {/if}
循环遍历
{volist name="$chapterlist" id="v"} <li> <a href="{:url('chapter_detail',['id'=>$v.id])}">{$v.title}</a> </li> {/volist}
PHP代码块
{php} $author = model('author')->where(['id'=>$book['authorid']])->find(); $chapterlist = model('chapter')->where(['bookid' => $book['id']])->select(); {/php}
注意:过多使用PHP代码块会影响模板的可维护性,建议在控制器中处理复杂逻辑。
系统常量
常量 | 说明 | 示例 |
---|---|---|
{__STATIC__} | 静态资源根路径 | /static |
{__ASSETS__} | 公共资源路径 | /static/assets |
{__MOBILE__} | 移动端资源路径 | /static/mobile |
{$version} | 版本号(用于缓存控制) | ?v=2.4.0 |