📖 项目概述
模板系统介绍
飞鸟阅读采用基于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 |