主站
论坛首页/ LiteLog /帖子

LiteLog 程序完整说明文档

作者:zhangwei 管理员 · 12 天前 · 15 浏览 · 0 回复
zhangwei
楼主
管理员
1 楼
LiteLog 程序完整说明文档

版本:1.0
最后更新:2026-10-06
文档适用:LiteLog 核心 v1.0 + 内置插件(小说阅读 v1.1、社区论坛 v1.3)


目录

  1. 系统概述
  2. 环境要求
  3. 安装部署
  4. 目录结构
  5. 核心架构
  6. 数据库结构
  7. 后台管理
  8. 主题系统
  9. 插件系统
  10. 钩子清单
  11. 内置插件:小说阅读
  12. 内置插件:社区论坛
  13. 伪静态配置
  14. 编辑器说明
  15. 安全机制
  16. 二次开发指南
  17. 常见问题
  18. 附录

一、系统概述

1.1 定位

LiteLog 是一个轻量级博客 + CMS 系统,采用 PHP + MySQL 技术栈,具备:

  • 极简的 MVC 架构(原生 PHP,无框架依赖)
  • 原生 PHP 模板引擎(无需学习新语法)
  • Hook 钩子机制的插件系统
  • 双模式 Markdown 编辑器(所见即所得 / Markdown)
  • 完整的后台管理
  • 内置小说阅读插件与社区论坛插件

1.2 设计哲学

原则说明轻量核心代码可控,无第三方框架简单原生 PHP 模板,一眼看懂可扩展47+ 钩子,插件热插拔安全PDO 预处理、HTML 白名单、CSRF、权限校验兼容PHP 7.1+ / MySQL 5.6+ / utf8mb4

1.3 特色功能

  • 双模式编辑器:所见即所得 / Markdown 一键切换
  • 多主题阅读器:白天 / 米黄 / 养眼绿 / 夜间
  • 伪静态统一路由:/forum、/novel 一次配置永久生效
  • Markdown 代码高亮:自研解析器,无第三方依赖
  • 附件上传:文档/压缩包/音视频,白名单校验

二、环境要求

2.1 服务器

项最低推荐PHP7.18.0 / 8.1MySQL5.65.7 / 8.0MariaDB10.310.6Web 服务器Apache / NginxNginx面板—宝塔面板

2.2 PHP 扩展

扩展用途必须pdo_mysql数据库✅mbstring字符串处理✅jsonJSON 编解码✅session登录态✅zipEPUB 解析小说插件必须domHTML 清洗论坛插件推荐gd / imagick图片处理可选

2.3 目录权限

content/            ← 755,可写
content/cache/      ← 755,可写
content/uploads/    ← 755,可写
content/backup/     ← 755,可写
content/plugins/    ← 755,可读
content/templates/  ← 755,可读

三、安装部署

3.1 上传代码

将 LiteLog 全部文件上传到网站根目录:

/www/wwwroot/你的域名/

3.2 创建数据库

宝塔面板 → 数据库 → 添加数据库:

  • 数据库名:litelog(自定义)
  • 用户名 / 密码:记下来
  • 字符集:utf8mb4

3.3 运行安装向导

浏览器访问:

http://你的域名/install.php

填写:

字段说明数据库主机localhost数据库名上面创建的数据库用户名上面创建的数据库密码上面创建的表前缀lt_(默认)站点名称你的博客名管理员账号自定义管理员密码至少 6 位

点"开始安装" → 完成。

3.4 删除安装文件

立即删除 install.php(安全)。

3.5 配置伪静态

宝塔 → 网站 → 设置 → 伪静态,粘贴以下规则(详见 第十三节):

# 静态资源直接返回
if (-f $request_filename) { break; }
if (-d $request_filename) { break; }

# 核心路由
rewrite ^/post/(\d+)\.html$ /index.php?post=$1 last;
rewrite ^/post/([^/]+)\.html$ /index.php?alias=$1 last;
rewrite ^/sort/([^/]+)/?$ /index.php?sort_alias=$1 last;
rewrite ^/tag/([^/]+)/?$ /index.php?tag=$1 last;
rewrite ^/author/(\d+)/?$ /index.php?author=$1 last;
rewrite "^/record/(\d{4}-\d{2})/?$" /index.php?record=$1 last;

# 通用插件路由
rewrite ^/([a-zA-Z][a-zA-Z0-9_-]*)/?$ /index.php?__plugin_path=$1 last;
rewrite ^/([a-zA-Z][a-zA-Z0-9_-]*)/(.+)$ /index.php?__plugin_path=$1&__plugin_rest=$2 last;

3.6 安装插件

后台 → 插件 → 找到"小说阅读"或"社区论坛" → 启用

首次启用会自动建表。


四、目录结构

4.1 整体结构

litelog/
├── index.php                    # 前台入口
├── install.php                  # 安装向导(安装后删除)
├── config.php                   # 数据库配置(安装时生成)
├── init.php                     # 初始化脚本
├── .htaccess                    # Apache 伪静态
│
├── include/                     # 内核
│   ├── lib/
│   │   ├── mysql.php            # Database 类
│   │   ├── option.php           # Option 类
│   │   ├── cache.php            # Cache 类
│   │   ├── hook.php             # Hook 类
│   │   ├── url.php              # Url 类
│   │   ├── view.php             # View 类
│   │   ├── dispatcher.php       # Dispatcher 类
│   │   ├── function.base.php    # 基础函数
│   │   └── function.common.php  # 公共函数
│   ├── model/                   # 数据模型
│   │   ├── log_model.php
│   │   ├── comment_model.php
│   │   ├── user_model.php
│   │   ├── sort_model.php
│   │   ├── tag_model.php
│   │   └── link_model.php
│   └── controller/              # 前台控制器
│       ├── log_controller.php
│       ├── sort_controller.php
│       ├── tag_controller.php
│       ├── author_controller.php
│       ├── record_controller.php
│       └── comment_controller.php
│
├── admin/                       # 后台
│   ├── index.php                # 后台入口
│   ├── helpers.php              # 后台辅助函数
│   ├── upload.php               # 图片上传接口
│   ├── assets/
│   │   ├── admin.css
│   │   └── editor/              # Markdown 编辑器
│   │       ├── markdown.js
│   │       ├── editor.js
│   │       └── editor.css
│   └── views/
│       ├── layout.php
│       ├── login.php
│       ├── dashboard.php
│       ├── logs.php / log_edit.php
│       ├── sorts.php / sort_edit.php
│       ├── plugins.php / themes.php
│       └── options.php
│
└── content/                     # 用户数据区
    ├── templates/               # 主题
    │   ├── default/             # 默认主题
    │   └── nebula/              # 星云主题
    ├── plugins/                 # 插件
    │   ├── novel/               # 小说插件
    │   ├── forum/               # 论坛插件
    │   └── site_stats/          # 站点统计(示例)
    ├── cache/                   # 数据缓存
    ├── uploads/                 # 上传文件
    │   ├── 2026/10/             # 文章图片
    │   ├── forum/               # 论坛图片
    │   └── forum/attach/        # 论坛附件
    └── backup/                  # 备份与日志
        └── sql-error.log        # SQL 错误日志

4.2 插件标准结构

content/plugins/插件名/
├── 插件名.php                   # 主文件(必需)
├── 插件名_callback.php          # 生命周期回调(可选)
├── 插件名_setting.php           # 后台设置页(可选)
├── assets/                      # 静态资源
│   ├── style.css
│   └── script.js
└── preview.jpg                  # 预览图(可选)

4.3 主题标准结构

content/templates/主题名/
├── header.php                   # 必需
├── footer.php                   # 必需
├── log_list.php                 # 必需
├── echo_log.php                 # 必需
├── page.php                     # 可选
├── 404.php                      # 可选
├── side.php                     # 可选
├── css/style.css
├── js/theme.js
├── js/codeblock.js
└── preview.jpg                  # 预览图

五、核心架构

5.1 请求生命周期

前台请求流程(访问 /post/123.html):

① 浏览器 → index.php
② index.php → require init.php
③ init.php 执行:
    - 定义常量(INCLUDE_PATH、CONTENT_PATH 等)
    - 加载 config.php(数据库信息)
    - 定义 BLOG_URL、TEMPLATE_URL、DB_PREFIX
    - 加载所有 lib/*.php
    - 连接数据库 → $DB
    - Option::init() 加载配置
    - 创建 $CACHE
    - 加载所有 model/*.php 和 controller/*.php
    - loadActivePlugins() 加载启用的插件
④ new Dispatcher()->dispatch():
    - 触发 dispatch_start
    - 检查 __plugin_path(插件通用路由)
      → 触发 dispatch_plugin_route 钩子
      → 插件处理则 exit
    - 解析 URL → 填充 $_GET
    - 匹配路由 → 确定 controller::method
    - 触发 dispatch_matched
    - 实例化控制器 → 调用方法
⑤ 控制器执行:
    - 调 Model 查数据
    - 处理业务逻辑
    - View::display('模板名', $data)
⑥ 模板渲染:
    - View::resolve('header') 找主题文件
    - include 主题文件
    - 触发各类钩子
    - 输出 HTML
⑦ 触发 dispatch_end → 请求结束

后台请求流程(访问 /admin/?action=logs):

① admin/index.php → require init.php
② require admin/helpers.php
③ 读 $_GET['action']
④ 判断 login / logout
⑤ checkLogin() 验证
⑥ 触发 admin_request 钩子
⑦ switch ($action) 路由到对应分支
⑧ 视图组装 → include views/layout.php

5.2 核心类

5.2.1 Database(数据库)

位置:include/lib/mysql.php

方法说明query($sql, $params)执行 SQL,返回 PDOStatementfetchAll($sql, $params)返回多行fetchOne($sql, $params)返回单行fetchColumn($sql, $params)返回单值insert($table, $data)插入,返回 lastInsertIdupdate($table, $data, $where, $whereParams)更新delete($table, $where, $params)删除

使用示例:

global $DB;

// 查询
$rows = $DB->fetchAll("SELECT * FROM " . DB_PREFIX . "blog WHERE hide='n' LIMIT 10");
$one  = $DB->fetchOne("SELECT * FROM " . DB_PREFIX . "user WHERE uid=?", [1]);

// 写入
$gid = $DB->insert('blog', ['title' => '标题', 'date' => time()]);
$DB->update('blog', ['title' => '新标题'], 'gid=?', [$gid]);
$DB->delete('blog', 'gid=?', [$gid]);

错误日志:所有 SQL 错误写入 content/backup/sql-error.log。

5.2.2 Option(配置)

位置:include/lib/option.php

方法说明Option::get($name, $default)读取配置Option::set($name, $value)写入配置Option::all()所有 autoload=y 的配置

内置配置:

site_title          站点名称
site_description    站点描述
site_key            关键词
index_lognum        首页文章数
current_template    当前主题
url_rewrite         伪静态开关
comment_need_check  评论审核
upload_maxsize      上传限制
active_plugins      启用的插件列表

5.2.3 Hook(钩子)

位置:include/lib/hook.php

方法说明Hook::addAction($hook, $callback, $priority = 10)注册Hook::doAction($hook, ...$args)触发Hook::removeAction($hook, $callback = null)移除

优先级:数字小的先执行。

5.2.4 Url(URL 生成)

位置:include/lib/url.php

方法说明Url::log($gid, $alias)文章 URLUrl::sort($sid, $alias)分类 URLUrl::tag($name)标签 URLUrl::author($uid)作者 URLUrl::record($date)归档 URL

5.2.5 View(模板)

位置:include/lib/view.php

方法说明View::resolve($name)返回主题文件路径(带 default 回退)View::display($name, $data)渲染模板

5.2.6 Dispatcher(路由)

位置:include/lib/dispatcher.php

职责:

  1. 优先处理插件通用路由(__plugin_path)
  2. 解析 URL 填充 $_GET
  3. 匹配路由到控制器
  4. 触发各阶段钩子

5.2.7 Cache(缓存)

位置:include/lib/cache.php

方法说明$CACHE->read($key)读取$CACHE->write($key, $data)写入$CACHE->delete($key)删除$CACHE->flush()清空

缓存文件位置:content/cache/{key}.php

5.3 全局常量

常量值示例说明LITELOG_ROOT/www/site/项目根目录INCLUDE_PATH/www/site/include/内核目录CONTENT_PATH/www/site/content/内容目录ADMIN_PATH/www/site/admin/后台目录DB_PREFIXlt_表前缀BLOG_URLhttps://ex.com/站点 URLTEMPLATE_URLhttps://ex.com/content/templates/default/主题 URL

5.4 全局变量

变量类型说明$DBDatabase数据库实例$CACHECache缓存实例$_SESSION['uid']int当前用户 ID$_SESSION['role']string当前用户角色

六、数据库结构

6.1 核心表(默认前缀 lt_)

6.1.1 lt_option(配置)

字段类型说明idINT UNSIGNED主键option_nameVARCHAR(100)配置名(唯一)option_valueLONGTEXT配置值autoloadENUM('y','n')是否自动加载

6.1.2 lt_user(用户)

字段类型说明uidINT UNSIGNED主键usernameVARCHAR(60)用户名(唯一)passwordVARCHAR(255)bcrypt 加密密码nicknameVARCHAR(100)昵称emailVARCHAR(100)邮箱roleENUMadmin / writer / visitorphotoVARCHAR(255)头像 URLcreate_timeBIGINT创建时间戳

6.1.3 lt_sort(分类)

字段类型说明sidINT UNSIGNED主键sortnameVARCHAR(100)分类名aliasVARCHAR(100)URL 别名pidINT UNSIGNED父分类 IDdescriptionVARCHAR(255)描述

6.1.4 lt_blog(文章)

字段类型说明gidINT UNSIGNED主键titleVARCHAR(255)标题dateBIGINT时间戳contentLONGTEXT渲染后的 HTMLcontent_mdLONGTEXTMarkdown 源码coverVARCHAR(255)封面图 URLexcerptTEXT摘要aliasVARCHAR(255)URL 别名authorINT UNSIGNED作者 UIDsortidINT UNSIGNED分类 IDtypeVARCHAR(20)blog / pageviewsINT UNSIGNED浏览数comnumINT UNSIGNED评论数topENUM('n','y')置顶hideENUM('n','y')隐藏allow_remarkENUM('n','y')允许评论

6.1.5 lt_comment(评论)

字段类型说明cidINT UNSIGNED主键gidINT UNSIGNED文章 IDpidINT UNSIGNED父评论 IDdateBIGINT时间戳posterVARCHAR(100)昵称commentTEXT内容emailVARCHAR(100)邮箱urlVARCHAR(255)网站ipVARCHAR(45)IP 地址hideENUM('n','y')隐藏

6.1.6 lt_tag / lt_tag_blog(标签)

lt_tag:tid(主键)、tagname(唯一)

lt_tag_blog:gid + tid(联合主键)

6.1.7 lt_link(友链)

id、sitename、siteurl、description、hide

6.1.8 lt_attachment(附件)

aid、gid、filename、filesize、date

6.2 小说插件表(前缀 lt_nv_)

表用途lt_nv_category小说分类lt_nv_book书籍lt_nv_chapter章节lt_nv_bookshelf书架lt_nv_history阅读历史lt_nv_author作者信息(预留)lt_nv_volume分卷(预留)lt_nv_bookmark书签(预留)lt_nv_note笔记(预留)lt_nv_comment评论(预留)lt_nv_rating评分(预留)lt_nv_purchase购买记录(预留)lt_nv_local_book本地书(预留)lt_nv_club / _member / _checkin共读营(预留)

核心表结构:

lt_nv_book:

id, title, author, summary, cat_id, cover, vip, featured, status,
source_url, views, create_time, update_time

lt_nv_chapter:

cid, book_id, title, content, vip, price, sort, word_count, create_time

6.3 论坛插件表(前缀 lt_forum_)

lt_forum_board(版块):

id, name, description, sort, thread_count, post_count, create_time

lt_forum_thread(主题):

id, board_id, uid, title, content, views, reply_count, is_top, is_locked,
last_reply_time, last_reply_uid, create_time, update_time

lt_forum_post(回复):

id, thread_id, uid, content, create_time

七、后台管理

7.1 登录

访问 /admin/,用安装时设置的管理员账号登录。

7.2 菜单功能

菜单功能概览文章/评论/分类/标签数量统计、最近文章文章列表 / 写文章 / 编辑 / 删除分类列表 / 新增 / 编辑 / 删除主题主题列表 / 启用 / 预览插件插件列表 / 启用 / 停用 / 设置设置站点名称 / 描述 / 关键词 / URL 重写等小说管理书籍 / 章节 / 分类管理(小说插件)论坛管理版块 / 主题管理(论坛插件)

7.3 写文章

编辑器支持:

  • 所见即所得模式(默认):直接编辑渲染后的样式
  • Markdown 模式:编写 Markdown,右侧实时预览

工具栏功能:

按钮功能H1/H2/H3标题B/I/S加粗/斜体/删除线对齐按钮居左/居中/居右/分散❝引用</>行内代码{ }代码块🔗链接🖼图片🎥视频▦表格―分割线• / 1. / ☑无序/有序/任务列表↶ / ↷撤销/重做🔍查找👁切换预览⛶全屏?帮助

快捷键:

快捷键功能Ctrl+B加粗Ctrl+I斜体Ctrl+K链接Ctrl+E行内代码Ctrl+F查找Ctrl+S保存Tab缩进Shift+Tab反缩进

7.4 上传

图片:admin/upload.php

  • 支持格式:jpg / jpeg / png / gif / webp
  • 大小限制:默认 5MB
  • 存储位置:content/uploads/YYYY/MM/

封面图:文章编辑页右侧"封面图"卡片


八、主题系统

8.1 主题位置

content/templates/主题名/

8.2 头部注释

header.php 顶部必须包含:

<?php
/**
 * Theme Name: 主题名称
 * Description: 主题描述
 * Version: 1.0.0
 * Author: 作者
 * Author URI: https://example.com
 */

8.3 必需文件

文件用途header.php页头footer.php页尾log_list.php文章列表echo_log.php文章详情

8.4 可用变量

列表页:

变量说明$logs文章数组$pageHtml分页 HTML$pageTypeindex / sort / tag / author / record$sort / $tag / $author根据页类型

详情页:

变量说明$log文章对象(含 url、date_fmt、tags 等)$prev / $next上下篇$comments评论树

8.5 可用 API

// 基础函数
h($str);                    // HTML 转义
dateFmt($ts);               // 时间戳 → Y-m-d
datetimeFmt($ts);           // 时间戳 → Y-m-d H:i
Url::log($gid, $alias);     // 文章 URL
Url::sort($sid, $alias);    // 分类 URL
Url::tag($name);            // 标签 URL

// 数据模型
LogModel::latest(10);       // 最新 10 篇
SortModel::all();           // 所有分类
TagModel::all();            // 所有标签
CommentModel::latest(10);   // 最新 10 条评论

// 视图
View::resolve('side');      // 侧边栏

8.6 切换主题

后台 → 主题 → 选择 → 启用

8.7 内置主题

default(默认):

  • 浅色背景
  • 左图右文的文章列表
  • 单栏布局

nebula(星云):

  • 深色霓虹风格
  • 玻璃拟态卡片
  • 渐变标题
  • 阅读进度条

九、插件系统

9.1 插件位置

content/plugins/插件名/

9.2 头部注释

插件名.php 顶部:

<?php
/**
 * Plugin Name: 插件名称
 * Description: 插件描述
 * Version: 1.0.0
 * Author: 作者
 */

9.3 生命周期

回调时机用途callback_init()启用插件时建表、初始化数据callback_up()更新插件时数据结构迁移callback_rm()删除插件时清理数据

注意:callback_init() 在主文件顶部自动触发(通过 Plugin_ensureTables() 模式),无需手动点击启用。

9.4 插件开发流程

  1. 创建目录 content/plugins/my_plugin/
  2. 创建主文件 my_plugin.php
  3. 创建生命周期文件 my_plugin_callback.php
  4. 注册钩子 Hook::addAction('hook_name', 'function_name')
  5. 后台启用

9.5 插件 URL 路由

老方式:/?action=xxx(兼容)

新方式:/插件名/子路径(伪静态)

实现步骤:

  1. 在插件里注册钩子:

B19

  1. 实现路由函数:

B20

  1. 访问 /my_plugin 自动生效,无需改 Nginx

9.6 插件设置页

创建 插件名_setting.php,后台插件列表会显示"设置"入口。


十、钩子清单

10.1 请求生命周期

钩子参数说明dispatch_start—请求开始dispatch_matched&$matched路由匹配后dispatch_end—请求结束dispatch_plugin_route$pluginName, $rest插件通用路由public_action_{name}—?action=name

10.2 首页 / 文章列表

钩子参数index_head—log_list_query&$cond, $page, $perPagelog_list_result&$logs, $page, $totallist_page_before$pageTypelist_item_before$log, $pageTypelist_item_after$log, $pageTypelist_page_after$pageType

10.3 文章详情

钩子参数log_display_before&$loglog_display_after&$loglog_view_before$loglog_view_after$loglog_content$loglog_content_before$loglog_content_after$log

10.4 分类 / 标签 / 作者 / 归档

钩子参数sort_display_query$sort, &$cond, $page, $perPagesort_display$sort, &$logstag_display_query$tag, &$cond, $page, $perPagetag_display$tag, &$logsauthor_display_query$author, &$cond, $page, $perPageauthor_display$author, &$logsrecord_display_query$year, $month, &$cond, $page, $perPagerecord_display$year, $month, &$logs

10.5 评论

钩子参数comment_save_before&$datacomment_save_after$cid, $datacomment_post$datacomment_display_before$commentcomment_display_after$commentcomment_form_before$logcomment_form_fields$logcomment_form_after$log

10.6 模板(前台)

钩子说明header_metameta 标签后template_head<head> 内 CSS 后header_after</header> 后before_content主内容区前after_content主内容区后footer_before<footer> 前template_footer页脚内sidebar_before / sidebar_after侧栏前后

10.7 后台

钩子参数admin_request$actionadmin_head—admin_menu$activeKeyadmin_footer—admin_dashboard_widgets—admin_log_save_before&$data, $gidadmin_log_save_after$gid, $data

10.8 数据 / 用户 / 扩展

钩子参数log_save_before&$data, $gidlog_save_after$gid, $datalog_delete_before$gidlog_delete_after$giduser_login$useruser_logout$uidplugin_activate$nameplugin_deactivate$nametheme_activate$name, $oldoption_save$key, $value

十一、内置插件:小说阅读

11.1 基本信息

  • 目录:content/plugins/novel/
  • 版本:1.1.0
  • URL 前缀:/novel
  • 数据表前缀:lt_nv_

11.2 前台页面

URL功能/novel首页(精选推荐 + 全部书籍)/novel/library书库(分类筛选 + 排序)/novel/book/{id}书籍详情(含两列目录)/novel/read?id=X&chapter=Y阅读器/novel/search?kw=xxx搜索/novel/me我的书架/novel/import后台导入

11.3 后台功能

  • 书籍增删改查
  • 章节增删改查
  • 分类管理
  • TXT 导入(自动识别编码与章节)
  • EPUB 导入(依赖 zip 扩展)
  • 追加 / 替换模式
  • 封面图上传

11.4 阅读器

  • 多主题:白天 / 米黄 / 养眼绿 / 夜间
  • 字号调节:14~32px,记忆到 localStorage
  • 行高调节:1.4~2.6
  • 键盘翻页:左右方向键
  • 阅读进度记录(登录用户)

11.5 电子书导入

TXT 导入:

  • 自动检测编码(UTF-8 / GBK / GB2312 / BIG5)
  • 章节识别:
  • 第X章 / 第X节 / 第X回 / 第X卷
  • Chapter X
  • 序 / 楔子 / 引子 / 尾声 / 番外
  • 目录页自动过滤
  • 标题与正文重复自动去重

EPUB 导入:

  • 按 spine 顺序读取
  • 自动过滤 cover / toc / copyright 页
  • 导航页智能识别(链接占比 > 60%)

11.6 目录展示

  • 两列网格布局
  • 每项显示:序号 + 标题 + 免费/VIP 徽章
  • 悬停:浅蓝背景 + 左侧蓝色竖条 + 序号变蓝
  • 无滚动条,完整显示

十二、内置插件:社区论坛

12.1 基本信息

  • 目录:content/plugins/forum/
  • 版本:1.3.0
  • URL 前缀:/forum
  • 数据表前缀:lt_forum_

12.2 前台页面

URL功能/forum首页(Hero + 栏目导航 + 左右结构)/forum/board/{id}版块详情/forum/thread/{id}帖子详情/forum/new发新帖/forum/edit/{id}编辑帖子/forum/search?kw=xxx搜索

12.3 后台功能

  • 版块管理(增删改)
  • 主题管理(置顶 / 锁定 / 删除)
  • 帖子统计

12.4 首页布局

┌────────────────────────────────────────┐
│  Hero(浅色渐变,含数据统计)           │
├────────────────────────────────────────┤
│  版块栏目导航(可悬浮预览最新帖)       │
├─────────────────────────┬──────────────┤
│  最新帖子列表           │  热门帖子    │
│  (头像+标题+元信息)   │  (TOP 10)  │
└─────────────────────────┴──────────────┘

12.5 富文本编辑器

工具栏按钮(44×44px,与核心编辑器一致):

  • B 加粗 / I 斜体 / S 删除线
  • H 标题 / ❝ 引用 / </> 行内代码
  • • 无序列表 / 1. 有序列表
  • 🔗 链接 / 🖼 图片 / 📎 附件
  • ⌫ 清除格式

12.6 附件上传

支持类型:

类别扩展名文档pdf, doc, docx, xls, xlsx, ppt, pptx, txt, md, csv压缩包zip, rar, 7z, tar, gz, bz2音视频mp3, wav, ogg, m4a, mp4, webm, mov设计psd, ai, sketch, fig

限制:

  • 大小:≤ 20MB
  • 黑名单:php / jsp / asp / exe / sh / bat / html / svg / js
  • 文件名清洗:去掉危险字符
  • 存储名随机化

展示:上传后自动插入附件卡片,点击下载。


十三、伪静态配置

13.1 通用规则(推荐)

宝塔面板 → 网站 → 设置 → 伪静态 → 粘贴:

# ==========================================================
# LiteLog 伪静态规则
# ==========================================================

# 静态资源直接返回
if (-f $request_filename) { break; }
if (-d $request_filename) { break; }

# ---------- LiteLog 核心路由 ----------
rewrite ^/post/(\d+)\.html$ /index.php?post=$1 last;
rewrite ^/post/([^/]+)\.html$ /index.php?alias=$1 last;
rewrite ^/sort/([^/]+)/?$ /index.php?sort_alias=$1 last;
rewrite ^/tag/([^/]+)/?$ /index.php?tag=$1 last;
rewrite ^/author/(\d+)/?$ /index.php?author=$1 last;
rewrite "^/record/(\d{4}-\d{2})/?$" /index.php?record=$1 last;

# ---------- 通用插件路由 ----------
rewrite ^/([a-zA-Z][a-zA-Z0-9_-]*)/?$ /index.php?__plugin_path=$1 last;
rewrite ^/([a-zA-Z][a-zA-Z0-9_-]*)/(.+)$ /index.php?__plugin_path=$1&__plugin_rest=$2 last;

关键点:

  • \d{4}-\d{2} 必须加双引号(Nginx 会把 {} 当作配置块)
  • 插件通用路由一次配置永久生效,装新插件不用改

13.2 URL 对照

类型伪静态 URL兼容 URL首页//文章/post/123.html/?post=123分类/sort/tech/?sort=1标签/tag/php/?tag=php作者/author/1/?author=1归档/record/2026-10/?record=2026-10小说首页/novel/?action=novel小说阅读/novel/read?id=1&chapter=5/?action=novel_read&id=1&chapter=5论坛首页/forum/?action=forum论坛版块/forum/board/1/?action=forum_board&id=1论坛帖子/forum/thread/5/?action=forum_thread&id=5

13.3 开启 URL 重写

后台 → 设置 → URL 重写 → 开启

13.4 Apache 用户

项目根目录已有 .htaccess,宝塔 Apache 会自动读取。


十四、编辑器说明

14.1 双模式编辑器(后台)

所见即所得模式(默认):

  • 直接编辑渲染后的样式
  • 像 Word 一样操作
  • 工具栏按钮直接生效

Markdown 模式:

  • 左边写 Markdown 源码
  • 右边实时预览
  • 支持语法高亮

切换:点击工具栏左上角的"所见即所得" / "Markdown"

14.2 Markdown 语法支持

语法说明# 标题1~6 级标题加粗加粗斜体斜体删除线删除线` 代码 `行内代码 `语言 代码块> 引用引用- 列表无序列表1. 列表有序列表- [ ]任务清单[文字](url)链接![alt](url)图片\| 表格 \|表格---分割线

14.3 代码高亮

支持语言:PHP / JavaScript / Python / Bash / SQL / Nginx / JSON

代码块复制:鼠标悬停在代码块,右上角出现"复制"按钮。

14.4 粘贴智能识别

  • 从网页复制:自动 HTML → Markdown
  • 纯文本粘贴:自动识别代码块(多行代码自动包裹 B23php

Hook::addAction('public_action_my_page', function () {
echo 'Hello';
exit;
});
B24php
Hook::addAction('dispatch_plugin_route', 'My_route');

function My_route($pluginName, $rest) {
if ($pluginName !== 'my_plugin') return;
$GLOBALS['__plugin_routed'] = true;

if ($rest === '') { My_home(); exit; }
if (preg_match('|^detail/(\d+)$|', $rest, $m)) {
$_GET['id'] = (int)$m[1];
My_detail();
exit;
}
$GLOBALS['__plugin_routed'] = false;
}
B25php
class MyModel {
public static function all() {
global $DB;
return $DB->fetchAll("SELECT * FROM " . DB_PREFIX . "my_table");
}
public static function add($data) {
global $DB;
return $DB->insert('my_table', $data);
}
}
B26php
Hook::addAction('admin_menu', function ($activeKey) {
$active = $activeKey === 'my_page' ? ' active' : '';
echo '<a class="nav-link' . $active . '" href="' . BLOG_URL . 'admin/?action=my_page">'
. '<span class="nav-icon"></span>'
. '<span class="nav-label">我的菜单</span></a>';
});

Hook::addAction('admin_request', function ($action) {
if ($action === 'my_page') {
ob_start();
echo '<div class="card"><div class="card-title">我的页面</div></div>';
$content = ob_get_clean();
include ADMIN_PATH . 'views/layout.php';
exit;
}
});
B27php
// 触发
Hook::doAction('my_plugin_event', $data);

// 监听
Hook::addAction('my_plugin_event', function ($data) {
// 处理
});
B28bash
chmod 755 /www/wwwroot/你的域名
B29nginx
rewrite "^/record/(\d{4}-\d{2})/?$" /index.php?record=$1 last;
B30js
content.style.setProperty('font-size', fs + 'px', 'important');
B31sql
ALTER TABLE lt_blog ADD COLUMN content_md LONGTEXT AFTER content;
ALTER TABLE lt_blog ADD COLUMN cover VARCHAR(255) DEFAULT '' AFTER content_md;
B32bash
mysqldump -u root -p 数据库名 > backup.sql
B33bash
mysql -u root -p 数据库名 < backup.sql
B34sql
SELECT table_name,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = '你的数据库名'
ORDER BY size_mb DESC;
B35php
error_reporting(E_ALL);
ini_set('display_errors', 1);
B36php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING);
ini_set('display_errors', 0);


**查看 SQL 错误**:

content/backup/sql-error.log


**查看插件错误**:

content/backup/plugin-error.log
```

18.4 版本更新日志

版本日期更新内容1.0.02026-10-01核心发布1.0.12026-10-02修复 content_md 字段1.0.22026-10-03优化后台界面1.1.02026-10-05新增双模式编辑器1.2.02026-10-06新增封面图、对齐功能1.3.02026-10-06新增插件伪静态、附件上传

18.5 技术支持

  • 文档:本文档 + 《插件开发规范》+ 《主题开发规范》
  • 示例:content/plugins/ 下的官方插件
  • 日志:content/backup/ 目录

本文档结束

LiteLog —— 轻量、简单、可扩展的博客 CMS

登录 或 后台登录 后参与讨论