Create advanced custom pages with HTML, BBCode, Markdown, PHP, or plain text content types.
  • JavaScript 49.2%
  • PHP 33.6%
  • Less 17.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-12 18:53:50 +08:00
js fix: 修复Modal-body flex布局缺失导致编辑窗口显示不全且无法滚动 2026-06-20 20:42:24 +08:00
migrations Flarum 1.0.0 2026-04-06 18:12:15 +02:00
resources fix: 用LESS转义语法修复calc(100vh-60px)被错误预编译成calc(40vh)的问题 2026-06-20 22:08:36 +08:00
src Flarum 1.0.0 2026-04-06 18:12:15 +02:00
.editorconfig Flarum 1.0.0 2026-04-06 18:12:15 +02:00
CHANGELOG.md Flarum 1.0.2 2026-04-13 00:22:22 +02:00
composer.json Flarum 1.0.1 2026-04-06 18:29:18 +02:00
extend.php Flarum 1.0.2 2026-04-13 00:22:22 +02:00
LICENSE Flarum 1.0.0 2026-04-06 18:12:15 +02:00
README.md 编辑README.md 2026-09-12 18:53:50 +08:00

Flarum 高级页面扩展(guomengyao fork)

Flarum 1.x Packagist License: MIT

为你的 Flarum 1.x 论坛创建支持 HTML、BBCode、Markdown、PHP 或纯文本多种内容类型的高级自定义页面。是 fof/pages 的强力替代品,支持多格式、实时预览、格式化工具栏和精细的访问权限控制。

这是 TryHackX/flarum-advanced-pages 的个人 fork,基于官方 1.0.3 / flarum-1 发布线。本 fork 与原作者无任何关联,也未获得其授权认可。扩展本身的全部功劳归属 TryHackX——本 fork 仅用于在官方 flarum-1 分支基础上携带一处本地 CSS 修复(详见下文)。

本 fork 的改动内容

修复:EditPageModal 编辑弹窗在桌面端(≥768px)显示过小

官方 LESS 源码中,弹窗高度是用一个混合单位的 calc() 表达式定义的:

max-height: calc(100vh - 60px);

在本项目的 LESS 编译流程下,混合单位(vh 与 px 混用)的 calc() 表达式会被 LESS 编译器自行预先求值,而不是原样保留给浏览器在运行时处理。结果产出了一个损坏、毫无意义的输出——calc(100vh - 60px) 被静默编译成了固定值 calc(40vh),导致编辑弹窗无论实际内容多少,渲染高度都被锁定在视口高度的约40%左右。表现为弹窗显得非常拥挤,代码编辑器被压缩进一条窄小的可滚动条带里。

修复方式是用 LESS 的字符串转义语法(~"...")把 calc() 表达式包裹起来,强制 LESS 把它当作字面字符串原样输出,而不是在编译期尝试求值:

max-height: ~"calc(100vh - 60px)";

本 fork 同时修正了弹窗内部的 flex 布局层级链条,使其与 Flarum 实际渲染出的 DOM 结构相匹配(真实结构是 .Modal-content > form > .Modal-header + .Modal-body,而不是之前误以为的反向嵌套关系),此前这一错误的层级假设导致弹窗主体在内容较长时完全无法滚动。

最新版本(v1.0.2,上游): 新增"替换论坛剧透"设置,可将 Flarum 默认的行内剧透样式,在全站帖子中替换为 Advanced Pages 的 details/summary 剧透样式。后台新增"论坛集成"设置区。支持按钮移到了后台页面顶部,并改进了相关 CSS 样式。

功能特性

  • 5种内容类型 - HTML(经HTMLPurifier净化)、BBCode、Markdown、PHP(沙箱执行)、纯文本
  • 格式化工具栏 - BBCode 和 Markdown 编辑器均提供上下文相关的格式化按钮
  • 实时预览 - Raw/Preview 切换,并带语法高亮(highlight.js One Dark 主题)
  • 代码编辑器 - 基于 CodeMirror 的编辑器,支持 HTML 和 PHP 语法高亮
  • BBCode 扩展标签 - [table]、[spoiler]、[center]、扩展版[url]解析器(均可配置开关)
  • 换行模式 - BBCode 页面可选 Flarum 原生换行规则或保留全部换行
  • 剧透系统 - [spoiler] / [spoiler=标题],支持基于权限的可见性控制
  • 后台管理面板 - 完整的增删改查,支持分页、每页条数选择和行内设置
  • SEO 支持 - Meta 描述和规范的 <title> 标签
  • 访问控制 - 发布、隐藏(仅管理员可见)、限制(需登录)、按用户组设置可见性
  • 自定义权限 - 管理页面权限、查看剧透内容权限
  • 简洁 URL - 页面可通过 /p/{slug} 访问

截图

后台页面管理、带工具栏的 BBCode 编辑器,以及实时预览效果。

环境要求

  • Flarum ^1.8
  • PHP ^8.1
  • PHP memory_limit 最低 256M(推荐 512M 以上)

安装方式

本 fork 未发布在 Packagist 上。需要先添加一条 VCS 仓库声明,再指向开发分支安装:

composer config repositories.guomengyao-advanced-pages vcs https://gitlab.com/guomengyao/flarum-advanced-pages.git
composer require tryhackx/flarum-advanced-pages:"dev-fix-modal-v1"
php flarum migrate
php flarum cache:clear
php flarum assets:publish

创建页面

  1. 进入后台管理面板 > Advanced Pages
  2. 点击创建页面
  3. 选择内容类型并撰写内容
  4. 配置可见性(发布、隐藏、限制、用户组访问)
  5. 保存——页面将在 /p/{你的slug} 上可访问

内容类型

类型 说明 安全性
HTML 完整的HTML,支持样式、脚本、表单 原样输出,受权限控制
BBCode 支持自定义标签和工具栏的BBCode 经s9e/TextFormatter转义和解析
Markdown 完整Markdown支持,带实时预览 经s9e/TextFormatter转义和解析
PHP 服务端PHP执行 仅管理员可用,沙箱执行,错误仅记录日志不展示
纯文本 自动转义文本,URL自动转链接 完全转义输出

BBCode 设置

可在后台设置中切换自定义BBCode标签的开关:

设置项 标签 默认状态
表格 [table] [tr] [th] [td] 启用
剧透 [spoiler] [spoiler=标题] 启用
居中 [center] 启用
扩展URL [url](接受被Flarum默认拒绝的URL) 禁用

修改BBCode设置后需要清除格式化器缓存:

php flarum cache:clear

换行模式(BBCode)

每个BBCode页面都可单独配置换行模式:

  • Flarum(默认)- 多个连续换行会折叠为单个换行(Flarum原生行为)
  • 保留 - 所有换行都会被保留为 <br> 标签

PHP 页面

PHP页面在沙箱环境中执行,可访问:

  • $page - 当前的页面模型
  • $actor - 当前用户(访客则为 null)
  • $settings - Flarum 的设置仓库
<h1>欢迎,<?= htmlspecialchars($actor ? $actor->display_name : '访客') ?></h1>
<p>当前时间:<?= date('Y-m-d H:i:s') ?></p>

错误会被记录到Flarum的日志中,但永远不会展示给访客。

页面可见性

选项 说明
已发布 有权限的用户可以访问该页面
草稿 页面存在但无法访问
隐藏 仅管理员可见
限制 需要登录才能查看
用户组访问 限制为特定用户组可见

权限

权限 所在位置 说明
管理高级页面 管理标签 创建、编辑、删除页面
查看剧透内容 查看标签 查看页面中的剧透内容

内存要求

Flarum 会把所有扩展的 LESS 样式一起编译。如果遇到 PHP Fatal error: Allowed memory size exhausted(内存不足致命错误):

  1. 在 php.ini 中将 memory_limit 至少设为 256M(推荐512M)
  2. WAMP用户注意:使用mod_fcgid的Apache读取的是Apache bin目录下的php.ini,不是PHP目录下的那份
  3. 修改后重启Apache

安全性

  • HTML页面以原始形式渲染(完整支持HTML/CSS/JS)——创建页面本身受权限控制
  • PHP执行在隔离的闭包沙箱中运行,配有自定义错误处理
  • PHP错误永不暴露给终端用户
  • 仅管理员可创建PHP页面
  • 原始 content 字段对非管理员的API响应隐藏
  • 扩展版URL解析器会阻止危险的URL协议(javascript:、data:、vbscript:)
  • 无权限用户访问页面时,剧透内容会在服务端被剥离

相关链接

许可证

MIT 许可证。详见 LICENSE 文件。