实现 Drupal 7 的 Markdown 文本格式支持
先调研官方 markdown 模块的结构与依赖:
模块自带 PHP Markdown Extra 解析库(includes/),无需外部依赖。查看实现并下载全部文件:
解析库齐备。查看过滤器的完整定义后安装模块:
库版本干净无 PHP 8 兼容问题。安装模块并创建格式:
表名应为 filter(非 filters)。补上剩余步骤:
两处小坑:权限表需要 module 字段;默认格式变量可能没生效。逐项核查并修正:
解析器本身正常。排查 check_markup 的过滤器链路:
两个现象都是同进程缓存伪影。用全新进程、以管理员身份做最终干净验证:
缓存 vs 数据库不一致——直接查库确认最终状态:
缓存行陈旧(只有 3 个格式)。定向清除 filter 缓存后复测:
过滤器链路全通。把 Markdown 权重设为负值使其成为所有用户的默认首选,然后终验:
渲染完美,但默认次序仍受进程内缓存影响。二次干净进程复查:
缓存行被某个并发写入者用旧权重回写(0)。清理后立刻做只读验证,排除并发干扰:
默认格式已生效(admin/匿名均为 markdown)。浏览器实测编辑表单确认预选状态:
全链路验证完成。清理临时文件并收尾:
Markdown 文本格式已配置完成并设为默认 ✅
完成内容
1. 安装官方 Markdown filter 模块(drupal.org 7.x-1.x 版)
- 位置:sites/all/modules/markdown/(含模块代码 + 内置 PHP Markdown Extra 解析库,Michel Fortin 出品,支持表格/脚注等扩展语法)
- 库为命名空间现代版本,已在 PHP 8.3 下实测无兼容问题
2. 创建 "Markdown" 文本格式
- 绑定 Markdown 过滤器,权重 -10(列表第一)
- 已授权"use text format markdown"给匿名 / 注册 / 管理员三个角色
3. 设为默认 —— 说明一个 Drupal 7 机制:默认文本格式 = "用户有权使用的第一个格式(按权重)",而非变量值。通过负权重 + 全员授权,现在每位用户的默认格式都是 Markdown。实测:
default (admin): markdown
default (anon): markdown
formats anon: markdown, filtered_html, plain_text
4. 渲染验证(check_markup 实测输出):
- **bold** → <strong>bold</strong>、*italic*、[链接](url) 全部正确
- 无序列表、块引用、Markdown Extra 表格均正常生成语义化 HTML
- 编辑表单的 Text format 下拉已含 "Markdown" 且无任何 PHP 告警
说明与提醒
- 旧内容不受影响:文本格式按内容单独存储,已发布的文章/评论仍用原格式渲染;只有新写内容默认走 Markdown。
- 安全提示:Markdown Extra 允许内联 HTML 直通(等同 Full HTML 权限),目前全角色可用。个人/开发站点没问题;若将来开放多人注册发布,建议把 Markdown 格式的使用权限收窄到管理员/可信角色,或在该格式里追加一个"限制允许的 HTML 标签"过滤器(顺序排在 Markdown 之后)。需要的话我可以直接帮你收紧。
刷新编辑器(新建/编辑内容)即可看到 "Text format: Markdown" 已默认选中。