ak
|
f1b9d1e1c3
|
refactor: 外链中转拆为内置插件 neatstudio.link-tracker
- 插件承载全部逻辑:redirects 迁移(hasTable 兼容旧库)、Redirect 模型、UrlRedirector、/go 路由+控制器、Filament 外链中转资源
- 核心只留 hook 接入点:
- tracked_url() 助手走 link.redirect 过滤器(评论正文/作者网址/友链模板统一调用)
- 正文外链改写移到插件的 post.rendered 过滤器(优先级 20,晚于会员付费过滤)
- 停用插件:链接恢复直连、内容不受影响;后台「管理 → 外链中转」查看点击量/启停
- 测试更新为插件上下文(含无过滤器降级断言);97 通过
|
2026-08-13 02:05:32 +08:00 |
|
ak
|
8f1ff6e3f9
|
feat: 外链中转 /go——点击统计 + 拦截 + 隐藏真实链接
- redirects 表 + UrlRedirector:go_url() 站外链接改写为 /go/{hash}(确定性 hash、同 URL 复用、并发安全、缓存)
- /go/{hash} 302 跳转 + 点击计数 + 最后点击时间;停用状态 410(二次拦截);后台「外链中转」资源可查看点击量/启停/删除
- 接入点:正文外链(渲染器统一改写)、评论正文自动链接(comment_body)、评论作者网址、友链(侧边栏+友链页);站内/相对/mailto/tel/锚点不中转
- 测试 6 个(改写/计数/拦截/复用/渲染/评论正文);README 补充
|
2026-08-13 01:28:10 +08:00 |
|
ak
|
c231f4af96
|
fix: [paid] 裸标签泄漏——核心渲染器兜底剥离 + 恢复 dev 库插件状态
- 根因:dev 数据库 membership 插件被停用(PluginRecord enabled 为空),其 post.rendered 过滤器未运行,[paid] 标签对所有访客裸露;与缓存无关
- 已恢复 membership 启用并清页面缓存,实测游客看到 teaser
- 防御:PostContentRenderer 渲染后兜底剥离裸 [paid]/[/paid] 标签,即使会员插件被停用也不会泄漏到页面
- 回归测试:渲染结果永不含 [paid]
|
2026-08-12 17:48:55 +08:00 |
|
ak
|
8fdf8dbb4b
|
docs: 开发规范/教程/demo 全套 + 修复插件运行期自动加载缺口
- demo 插件 plugins/demo.hello-world:演示短代码过滤器、comment.created 钩子、路由+命名空间视图、迁移+模型、后台设置页、filament.post_form 表单注入
- demo 主题 themes/demo:最小可运行主题(覆盖 partials + 绿色系样式)
- 教程 docs/tutorial-plugin.md / docs/tutorial-theme.md(10 分钟上手);规范 docs/development.md(代码/插件/主题/队列/测试/提交)
- README 增加开发者文档导航与上手示例
- 修复关键缺口:插件类原来靠 composer.json 硬编码加载,第三方 ZIP 安装的插件无法加载;现改为启动时扫描 plugins/*/src 运行期注册 PSR-4(register 阶段,保证 Filament 面板解析插件页面前就绪),composer.json 移除硬编码
- 测试:demo 插件 3 个用例 + demo 主题渲染;全量 89 通过
|
2026-08-12 17:26:34 +08:00 |
|
ak
|
01861f8809
|
feat: 插件使用说明(usage)+ 页面缓存命中统计
- plugin.json 新增 usage 字段(多行文本),后台插件卡片折叠展示;四个内置插件补齐使用说明
- PageCacheMiddleware 记录命中/未命中计数(按日滚动),仪表盘新增「页面缓存」统计卡(条目数 + 命中率),用于判断前台缓存效果、是否需额外加速
- 文档与测试同步
|
2026-08-12 03:57:22 +08:00 |
|
ak
|
e06e7c4300
|
feat: 商城付费购买流 + 市场契约
- MarketPackage 模型/迁移:市场商品作为可购买实体(payable),复用 Payment 订单
- MarketPurchaseService:购买创建订单、已购判断、免费/付费门槛校验
- payment.paid 监听(核心注册,仅支付插件启用时)标记商品已购
- 市场契约:条目含 name/type/price(分)/download_url;插件市场 Tab 只显示 plugin、主题市场 Tab 只显示 theme;付费商品显示「购买」按钮与「已购买」徽章,未购买无法安装
- 新增主题市场 Tab(原仅插件页有市场)
- 测试:购买/沙箱支付标记已购/重复购买/安装门槛/免费条目/支付插件禁用
|
2026-08-12 01:34:04 +08:00 |
|
ak
|
6a7daa79da
|
fix: review 修复——meta 覆盖、重复支付、卸载守卫、测试补全
- EditPost 保存时合并表单中的部分 meta 键,防止插件注入字段覆盖 unlocked_user_ids 等其他键(单篇解锁用户会失去权限的 bug)
- unlockPost:已有阅读权限(会员/作者/已解锁)直接跳文章,不重复支付
- subscribe:已有该套餐有效订阅直接跳我的订阅页
- uninstall:存在已启用的依赖者时拒绝卸载(与 disable 一致)
- .gitignore 排除 storage/media-library/temp 测试残留
- 测试:AdminPagesTest 补 /admin/plugins /admin/payments;新增 Livewire 保存验证 meta 保留、解锁/订阅防重复支付、卸载守卫
|
2026-08-12 00:53:46 +08:00 |
|
ak
|
4f59afb7ce
|
feat: 插件依赖强制校验 + 文章后台表单/表格注入 hook
- PluginManager: requires 依赖链校验(enable 需依赖已启用,disable 阻止有启用依赖者的插件,boot 跳过依赖未满足插件),all() 输出依赖状态供后台展示
- Plugins 页:卡片显示依赖链徽章,依赖未满足时禁用启用按钮,启停失败弹错误通知
- PostResource: form()/table() 增加 filament.post_form / filament.post_table 注入点
- membership 插件:注入「付费设置」Section(meta.price 单篇价格 + meta.members_only 会员专享)与表格价格/会员列
|
2026-08-12 00:18:40 +08:00 |
|
ak
|
56735804a1
|
feat: Markdown 正文自动 TOC(锚点+折叠目录)+ 社交账号扩充国内平台(B站/小红书/抖音/视频号/公众号/其他)+ 侧边栏社交展示 + JSON-LD sameAs 全平台聚合 + 首页 h1(SEO 语义)
|
2026-08-11 23:49:19 +08:00 |
|
ak
|
d9a6ca2959
|
feat: 注入块拖拽排序(后台顺序即渲染顺序)+ theme.json 声明 inject_points + 主题卡片展示注入点
|
2026-08-11 23:25:34 +08:00 |
|
ak
|
3e3b9a2bfd
|
feat: 主题内容注入点系统(10 个标准位置,同位置多条注入块可排序/启停,stylevar 变量复活)+ 后台主题注入管理页(Tab 分区)+ 缓存/设置收进顶部用户下拉菜单(Livewire action 即时通知)
|
2026-08-11 23:20:57 +08:00 |
|
ak
|
7622cd8e2a
|
feat: 前台整页响应缓存(匿名 GET,浏览量走 track-view 独立端点)+ 后台缓存管理页 + 侧边栏 nav-groups 负 margin 归零
|
2026-08-11 21:53:09 +08:00 |
|
ak
|
b9f02df49f
|
feat: 后台侧边栏紧凑化(13rem + 自定义 CSS)+ 博客设置改 Tab 六分区(站点/外观/订阅SEO/评论/附件/维护),补回时间格式/评论排序/缩略图/水印等 sablog 设置项并接入实际使用
|
2026-08-11 21:30:56 +08:00 |
|
ak
|
fc6624cf84
|
feat: 前台 .shtml 后缀 canonical + strict_types 全量启用 + 对外 API(Sanctum+Scramble 文档)+ pm2 ecosystem + GitHub Actions CI + 插件/主题/架构/API 文档 + REDIS_PREFIX 说明
|
2026-08-11 19:37:33 +08:00 |
|
ak
|
34ea046906
|
fix: [attach] 短代码跨文章全局解析 + 缺失残留清理;损坏附件导入降级不中断;media 导入幂等;sablog:import 支持 sqlite 老库 + 5 个导入自动化测试
|
2026-08-11 19:16:16 +08:00 |
|
ak
|
e735967218
|
fix: 登录 Undefined array key(unset 后访问已删 key);sablog 主题 footer 错位(#page 由页面视图自闭合);PaymentSettings Section 类路径(v5 移到 Schemas);modern 主题两栏布局
|
2026-08-11 19:02:53 +08:00 |
|
ak
|
fb9175402a
|
M7: 全量测试(25 用例)+ README + 部署文档(nginx/systemd/cron)+ theme:publish 命令
|
2026-08-11 18:48:16 +08:00 |
|
ak
|
1d1df43cee
|
M5: Workerman 常驻服务 + AI 审核/润色插件 + 支付插件(支付宝/微信/沙箱)+ 会员插件(套餐/订阅/付费文章)
|
2026-08-11 18:29:35 +08:00 |
|
ak
|
f77c96d3aa
|
M4: 插件框架(钩子系统/ZIP安装/市场客户端)+ blog-seo 插件(JSON-LD/OG/llms.txt/Markdown导出)+ 后台插件/主题管理页
|
2026-08-11 18:15:56 +08:00 |
|
ak
|
dee0208f1d
|
M3: Filament 后台资源(文章/分类/评论/媒体/用户/友链)+ 博客设置页 + 仪表盘统计
|
2026-08-11 18:08:47 +08:00 |
|
ak
|
6214976a88
|
M2: 主题系统(sablog经典+modern简约)+ 前台全部页面 + 老 URL 301 兼容 + markdown 双份导入
|
2026-08-11 17:58:29 +08:00 |
|
ak
|
f16bb75538
|
M1: 数据模型 + sablog:import 脚本(MySQL 8 验证通过,不迁移 trackback 等过时功能)
|
2026-08-11 17:40:13 +08:00 |
|