文章海报生成

文章海报生成截图
文章海报生成截图
文章海报生成缩略图
文章海报生成缩略图

BadouCMS 插件:在文章详情页一键生成分享海报,海报包含封面、标题、简介、站点品牌、发布日期和文章二维码,支持浏览器端下载与后台统一管理。

功能

  • 文章详情页自动挂载「生成海报」按钮,也可在模板中手动指定位置
  • 750 × 1000 竖版海报,封面自适应裁切,标题/简介自动换行与省略
  • 自动生成文章二维码,扫码即可阅读原文
  • 支持自定义品牌名称、Logo、头部背景图、主题色、底部文案
  • 用户生成后自动上传缓存,后台可视化查看、下载、批量删除、一键清空
  • 所有图片由服务端转成 data URL,Canvas 不会因跨域被污染,下载不会失败
  • 适配 PC / 手机端,无第三方前端依赖(不依赖 jQuery、Layui,主题无需改动)

环境要求

项目要求
BadouCMS2.4.0 及以上(依赖 ModuleViewFilter HTML 响应钩子)
PHP8.1+(与 BadouCMS 保持一致)
依赖模块cms(提供文章详情与内容模型)
扩展GD(生成二维码,系统自带二维码标签同样需要)
目录权限public/uploads 可写

使用

  • 前台:打开任意文章详情页,右下角会出现「生成海报」按钮,点击后预览、保存。
  • 后台:「文章海报 → 海报列表」查看已缓存的海报,可预览大图、批量删除。
  • 后台:「文章海报 → 海报设置」调整开关与样式,「清空海报」会同时删除数据库记录与图片文件。

配置项

配置说明
启用海报总开关,关闭后不输出按钮与接口数据
自动缓存用户生成后自动上传保存,后台可统一管理
品牌名称 / Logo留空时读取站点标题与站点 Logo
显示内容封面、简介、发布日期、二维码的独立开关
标题 / 简介行数1~3 行,超出自动省略
底部文案 / 二维码提示 / 保存按钮海报与弹窗上的自定义文案

目录结构

modules/poster/
├── Poster.php                       # 插件入口:注入、菜单、安装/启停
├── info.ini                         # 插件信息
├── install.sql                      # 海报表与配置表
├── depend.php                       # 依赖 cms >= 2.4.0
├── README.md
├── .modulerc                        # 启用后释放到项目根目录的文件清单
├── app/
│   ├── admin/controller/Poster.php  # 后台:列表、设置、清空
│   ├── admin/view/poster/           # 后台视图
│   ├── common/library/PosterImage.php  # 图片转 data URL、二维码
│   ├── common/model/Poster.php      # 海报记录(删除时清理文件)
│   ├── common/model/PosterSetting.php  # 配置读写与校验
│   ├── index/controller/Poster.php  # 前台接口:data / save
│   └── index/route/poster.php       # 前台接口路由
└── public/assets/poster/
    ├── poster.css                   # 按钮与弹窗样式(访问地址 /assets/poster/poster.css)
    └── poster.js                    # Canvas 合成、预览、下载、上传

启用插件后,app/ 与 public/assets/poster/ 下的文件由框架释放到项目根目录;禁用时自动收回插件目录。

接口

方法地址说明
GET/poster/api/data?id=文章ID返回标题、简介、封面、二维码、品牌等数据(均为 data URL 或文本)
POST/poster/api/save参数 id、image(data URL),保存/覆盖该文章的海报

接口为公开接口(海报需要游客也能生成),服务端会校验文章是否已发布、图片格式与大小,并限制单篇文章只保留一张缓存海报。

常见问题

1. 前台没有按钮

  • 确认插件已启用,且「海报设置 → 启用海报 / 自动注入」已开启;
  • 本插件依赖 BadouCMS 2.4+ 的 ModuleViewFilter,旧版本请升级后台;
  • 检查详情页 HTML 是否包含 id="bd-poster-app",以及 /assets/poster/poster.js 是否 404(重新启用插件可重新释放静态资源)。

2. 提示海报保存失败

  • 检查 public/uploads/poster 目录是否存在且可写;
  • 确认 PHP post_max_size 不小于 8M(海报以 base64 上传)。

3. 海报里没有封面图

  • 文章「缩略图」为空时会尝试读取多图第一张及正文第一张图片;
  • 远程图片需允许服务端访问,内网地址会被安全策略拦截。

4. 想换海报尺寸/版式

  • 版式在 public/assets/poster/poster.js 的 draw() 中,修改 W、H 与各区块坐标即可;修改后记得同步提升 Poster.php 中的 VERSION 以刷新浏览器缓存。

卸载说明

本地安装的插件无法通过官方模块管理卸载,请按下面步骤手动清理:

  1. 删除 .modulerc 中列出的全局文件(app/admin/...、app/common/...、app/index/...、public/assets/poster/...);
  2. 删除后台菜单:在「权限管理 → 菜单规则」中删除名称为 poster 及其子节点;
  3. 如需彻底清理,删除 bd_poster、bd_poster_setting 两张表与 public/uploads/poster 目录;
  4. 将 modules/poster/info.ini 的 state 改回 0,删除 modules/poster 目录;
  5. 清除后台缓存(或删除 runtime 下的缓存文件)。

保留两张表与图片时,重新安装后历史海报仍可继续使用。

官方QQ交流②群
官方QQ交流②群
QQ咨询 微信咨询 VIP代理 回到顶部