gouki
d2e24522be
fix(ai-jobs): add Dispatchable trait for dispatchSync static calls
Build and Deploy / verify (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 17s
2026-10-15 00:08:28 +00:00
gouki
2e052498a5
feat: AI 任务同步执行、评论垃圾管理、会员导航分组、多 AI 配置
...
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 20s
- 评论 AI 审核/文章润色改为同步执行(站点无 queue worker,任务曾永久卡队列,
导致垃圾评论滞留待审核、润色毫无效果);审核在响应结束后经 terminating 触发
- 评论表:修复 approve 闭包里误嵌入 recordUrl 的坏链;新增「非垃圾」恢复发布、
批量「标为垃圾」、工具栏「清空垃圾评论」;各操作补充通知反馈
- 会员套餐/订阅/订单移入新导航组「会员」
- LlmClient 支持多服务商 profile;AI 设置页可添加多个 AI 并为审核/润色/封面
分别指定服务商(不指定用默认配置);封面生成同步支持 profile
- AI 设置页:润色改同步并即时展示结果,按钮加 loading;删除无 workerman 的
WebSocket 进度区块
2026-10-15 00:06:55 +00:00
gouki
57b6221d90
feat: list mode 50/page, card mode left-image rows, AI cover generation command
...
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 18s
- blog_paginate: 纯列表模式每页 50 条(list_per_page 可调),其余模式仍走 per_page
- 图文(card)模式:卡片网格改为左图右文横排,小屏回退竖排;摘要放宽到 100 字
- 新增 covers:generate:复用 AI 设置的 LLM 配置调 /image_generation(默认 image-01),
为无封面文章批量生成封面存入 media cover 集合;支持 --all/--limit/--post/--style/--dry-run
- AI 设置页新增图片模型、封面风格两项配置
- 修正 HomeViewModeTest:列表模式为纯标题(不再显示摘要),并断言每页 50 条与图文布局
2026-10-13 23:58:15 +00:00
gouki and Cursor
ae47447062
feat: restore sablog browse modes and clean imported HTML
...
Build and Deploy / verify (push) Successful in 40s
Build and Deploy / deploy (push) Successful in 36s
Keep the public site readable after import (nbsp, highlighter, wrapping code, compact pager) and finish the admin extras already in this tree: sticky levels, preview, page cache, and live llms.txt.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-18 21:33:02 +00:00
gouki and Cursor
469160dc3f
feat: add admin env badge, quick post button, and harden plugin enable
...
Build and Deploy / verify (push) Failing after 15m17s
Build and Deploy / deploy (push) Skipped
Show local/prod in the Filament topbar, jump to create post in one click, tighten sidebar spacing, and stop Hello World from 500ing when its tables are missing.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-18 08:24:16 +00:00
gouki
38723662e2
fix(seo): read id/cid route params after sablog URL refactor
Build and Deploy / verify (push) Successful in 34s
Build and Deploy / deploy (push) Successful in 39s
2026-09-16 23:06:14 +00:00
gouki and Cursor
de03ddec52
Merge branch 'main' of gitea.neatcn.com:gouki/laralog
...
Build and Deploy / verify (push) Successful in 34s
Build and Deploy / deploy (push) Successful in 40s
Keep media-library covers while adopting sablog /show-{id}.shtml canonical URLs.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 19:06:42 +00:00
gouki and Cursor
f81397a289
feat: use xpier media library for uploads and markdown embeds
...
Store media:ID in post bodies instead of CDN URLs, and keep sablog attach tokens as a fallback.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-16 19:03:52 +00:00
gouki
f5987e7cc2
refactor(routes): canonical URLs now match sablog format exactly
...
Build and Deploy / verify (push) Successful in 1m6s
Build and Deploy / deploy (push) Successful in 41s
- /show-{id}.shtml (comments page: /show-{id}-{page}.shtml)
- /category-{cid}.shtml / /category-{cid}-{page}.shtml
- /archives-{YYYYMM}.shtml / /archives-{YYYYMM}-{page}.shtml
- /tag/{name}, /tagslist.shtml, /index-{page}.shtml
- slug 时代的 /posts/{slug} 等旧格式全部 301 到 sablog 格式
2026-09-09 21:21:07 +00:00
gouki
d5e68ab6fc
fix(link-tracker): prefix index on target_url for MySQL 5.7 compat
Build and Deploy / verify (push) Successful in 1m3s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 19:33:47 +00:00
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
5f74dd76e4
feat: 文章/分类/评论关联细节完善
...
- 文章列表:会员插件注入「付费」徽章列(会员/付费¥xx,停插件即消失)
- 分类:真实文章数(withCount)、名称点击跳文章列表并按分类筛选(ListPosts booted 预置筛选)
- 分类:新增封面(medialibrary)+ 介绍(description 字段/表单);前台分类页顶部展示介绍区;SEO description + BreadcrumbList 结构化数据(GEO)
- 文章编辑:MarkdownEditor 内容区加大(26rem);文章编辑页新增「评论」关系管理页(可审/拒)
- 评论列表:文章列带摘要
- 三套主题补 .category-intro 样式
- 测试更新(付费徽章列)
2026-08-12 22:44:16 +08:00
ak
c12eb38cca
feat: 后台表格优化——行点击禁用/标题省略/行高统一/筛选控件紧凑
...
- 8 个资源表格 recordUrl(null)+recordAction(null):行不再可点击,查看/编辑仅通过操作列按钮;标题列不再自动变链接
- 标题列单行省略(含分类描述),长标题不换行,所有数据行统一 53px 与表头等高
- 筛选下拉控件紧凑(min-height 1.75rem、字号 0.8rem),与应用按钮协调
- 重置链接紧跟应用筛选按钮(不再推到最右)
- 操作列固定宽度 88px
- 实测:表头=数据行=53px、行点击关闭、重置紧跟应用
2026-08-12 19:11:13 +08:00
ak
359d350083
feat: 筛选条件 Above 常驻横排 + 修正表格行紧凑(行高驱动源)
...
- 五个表格筛选改为 AboveContent 常驻显示,隐藏「筛选条件」标题、压缩为一行
- 修正行紧凑:行高由选择列/表头驱动(数据单元格默认 padding 为 0,此前加 padding 反而加高)
2026-08-12 18:20:59 +08:00
ak
e9a0a49fb7
revert: 表格筛选回退默认 Dropdown 布局(与搜索同区、紧凑)
...
Above 布局与工具栏搜索分成两个区域且占空间;回退 Filament 标准做法:筛选按钮在工具栏、与搜索框同一行,激活时带数量徽章。保留表格行紧凑 CSS
2026-08-12 18:02:20 +08:00
ak
24b3c25e60
feat: 后台表格筛选改为 Above 常驻布局
...
文章/评论/用户/媒体/订单五个表格的筛选条件从下拉改为表格上方内联显示(FiltersLayout::AboveContent),无需点击即可看到并操作筛选
2026-08-12 17:51:02 +08:00
ak
d7a9135456
fix: 已解锁后 [paid] 标签裸露——替换为付费内容块
...
post.rendered 过滤原只在无权限时替换 [paid];有权限时原始标签直接显示在页面。现在:
- 有权限:替换为 <div class="paid-content"> 付费内容块(带「付费内容」小标签),三套主题补齐样式
- 先去掉 Markdown 转换产生的 <p>[paid]</p> 包裹,避免替换后残留未闭合标签
- 测试:游客与会员均断言不出现裸 [paid]
2026-08-12 17:40:53 +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
22df17f02a
feat: 真实支付配置 + 修复 yansongda 配置结构 bug + 后台 AI 实时进度
...
- 支付设置:支付宝/微信各自支持正式/沙箱网关环境,凭据字段补全(支付宝公钥、微信商户证书私钥/平台证书 PEM),密钥可直接粘贴 PEM 文本(yansongda 支持字符串)
- 修复关键 bug:yansongda 配置结构错误(app_id 等在 default 租户外,真实网关拿不到配置),现按 alipay.default / wechat.default 正确传入,并用 _force 保证每次调用生效
- 后台 AI 设置页新增 WebSocket 实时审核进度(ai.moderation.* 事件),未连接时降级提示
- 部署文档:明确 queue:work 与 workerman:serve 等价、dev:watch 用法
- 测试:支付宝/微信配置结构回归 + AI 设置页加载
2026-08-12 03:31:08 +08:00
ak
7228a4f14a
fix: 付费块文章解锁无响应——unlockPost 守卫误用 canReadPost
...
付费块文章的整篇是公开的,canReadPost 恒为 true,导致解锁请求被"已有权限"守卫拦截直接跳回文章页,不创建订单。改为按 canReadPaidContent 判断(能否读付费内容),并补回归测试:付费块解锁→创建订单→沙箱支付→[paid] 块可见
2026-08-12 01:12:45 +08:00
ak
8ef250ba80
feat: 前台 paywall——整篇锁定渲染付费墙,付费块替换为 teaser
...
- membership/post.rendered 过滤:整篇锁定(members_only)渲染 paywall 视图(封面+标题+价格+单篇解锁/开通会员按钮,游客引导登录);[paid] 块替换为带解锁按钮的 teaser;替换改用 preg_replace_callback 避免 $ 转义问题
- 视图放 resources/views/membership/(主题同名文件可覆盖),两主题补充 .paywall/.paid-teaser 样式
- 修复泄漏:excerpt_or_fallback 对 members_only 文章不再回退截取正文,防止内容泄漏到 paywall 与 SEO meta
- 测试:更新 teaser 断言,新增 guest 见 paywall、登录用户见解锁/会员按钮
2026-08-12 01:02:10 +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
ec087fe2a8
feat: Payment 订单商品化——多态 payable 关联购买实体
...
- payments 表新增 payable_type/payable_id(nullableMorphs),订单可关联文章/套餐等可购买实体
- createOrder 接收 $payable 模型,取代 description 字符串解析
- membership 支付回调按 payable instanceof 分发(激活订阅 / 解锁单篇)
- Post/MembershipPlan 提供 payableLabel/payableUrl 约定方法;Payment 用约定方法生成展示标签与后台链接(皮肤等新实体可直接接入)
- 订单表格新增「类型」徽章(文章/会员套餐),商品列链接到对应后台编辑页;无 payable 的旧订单显示 —
2026-08-12 00:22:50 +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
ef8ec75e83
feat: 社交账号设置(微博/GitHub/X/Facebook/知乎/邮箱)+ JSON-LD sameAs(Person/Organization/WebSite)+ og:image/og:locale/article 时间 + twitter 完整卡片
2026-08-11 23:33:30 +08:00
ak
3ff766d980
fix: 分类/友链资源字段全部中文化(语言包 lang/zh_CN.json + __() 引用),支付过滤补 label,消除后台表格/表单英文
2026-08-11 23:31:50 +08:00
ak
6c7562115f
feat: 后台全中文(Filament zh_CN 语言包+资源中文label)+ 插件独立导航分组 + 插件/主题管理卡片化 + 主题预览图(无头浏览器生成)+ 两套主题移动端适配
2026-08-11 21:18:18 +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
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