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
|
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
|
a22175d5b7
|
style: 筛选下拉再压一档(29px),与应用按钮(25px)协调
|
2026-08-12 19:19:53 +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
|
1d0fe3f8b6
|
style: 筛选区一行横排(重置靠右/按钮缩小)+ 表头高度对齐数据行
- 筛选区整体 flex 一行:重置靠右(order+margin-left:auto)、各条件 label 内联、应用按钮缩小
- 表头 padding 提到 *3(12px),与数据行(53px,受操作列按钮固定高度约束)视觉差缩小
- 数据行高度:.fi-ta-text/.fi-ta-icon padding-block 由默认 *4 压到 *1.75(57→53px),双行标题行 81→63px
|
2026-08-12 19:00:55 +08:00 |
|
ak
|
0c5b19b4eb
|
style: 筛选区一行横排(重置|条件|应用)+ 表头/数据行高度和谐
- 筛选区整体 flex 一行:重置链接、各条件(label 内联在控件左侧)、应用按钮同行排列,必要时自动换行
- 行高:表头 0.5→0.5625rem 稍加,选择列 0.4375→0.375rem 稍减,单行数据行与表头高度趋近一致
|
2026-08-12 18:33:47 +08:00 |
|
ak
|
2c3e18fee6
|
style: 后台再收一档——表头/选择列/筛选区间距微减
|
2026-08-12 18:21:33 +08:00 |
|
ak
|
359d350083
|
feat: 筛选条件 Above 常驻横排 + 修正表格行紧凑(行高驱动源)
- 五个表格筛选改为 AboveContent 常驻显示,隐藏「筛选条件」标题、压缩为一行
- 修正行紧凑:行高由选择列/表头驱动(数据单元格默认 padding 为 0,此前加 padding 反而加高)
|
2026-08-12 18:20:59 +08:00 |
|
ak
|
a314658bdd
|
feat: 筛选下拉条件横排 + 表格紧凑保留呼吸感
- 文章表筛选(状态/格式/置顶)在 Dropdown 内 3 列横排(filtersFormColumns(3)),下拉加宽(3xl)避免拥挤
- 表格行紧凑从 0.4rem 放宽到 0.6rem,数据行与表头一并收紧但保留上下间隔
|
2026-08-12 18:05:40 +08:00 |
|
ak
|
e9a0a49fb7
|
revert: 表格筛选回退默认 Dropdown 布局(与搜索同区、紧凑)
Above 布局与工具栏搜索分成两个区域且占空间;回退 Filament 标准做法:筛选按钮在工具栏、与搜索框同一行,激活时带数量徽章。保留表格行紧凑 CSS
|
2026-08-12 18:02:20 +08:00 |
|
ak
|
66194b6b22
|
feat: 后台筛选条件横向排列 + 全局紧凑 CSS
- 文章表筛选改为 filtersFormColumns(3) 一行横向排列,不再纵向堆叠占空间
- 后台紧凑化 CSS:表格行(fi-ta-cell/fi-ta-header-cell)与表头工具栏收紧内边距,筛选区(Above 布局)压缩留白
- 说明:Filament 官方无全局紧凑开关,紧凑由 CSS 实现(侧边栏已如此)
|
2026-08-12 17:54:35 +08:00 |
|
ak
|
24b3c25e60
|
feat: 后台表格筛选改为 Above 常驻布局
文章/评论/用户/媒体/订单五个表格的筛选条件从下拉改为表格上方内联显示(FiltersLayout::AboveContent),无需点击即可看到并操作筛选
|
2026-08-12 17:51:02 +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
|
d7a9135456
|
fix: 已解锁后 [paid] 标签裸露——替换为付费内容块
post.rendered 过滤原只在无权限时替换 [paid];有权限时原始标签直接显示在页面。现在:
- 有权限:替换为 <div class="paid-content"> 付费内容块(带「付费内容」小标签),三套主题补齐样式
- 先去掉 Markdown 转换产生的 <p>[paid]</p> 包裹,避免替换后残留未闭合标签
- 测试:游客与会员均断言不出现裸 [paid]
|
2026-08-12 17:40:53 +08:00 |
|
ak
|
2089832dc0
|
fix: 主题样式补齐——页头页脚宽度对齐 + 缺失类
- modern:.m-container 由 720px 改为 1080px 与主体对齐(原页头/页脚明显窄于内容);新增 .container 规则;social-links 胶囊样式
- sablog:补 .read-more、.social-links 样式
- demo:补 .container 与 .main-layout max-width,避免内容全宽
|
2026-08-12 17:33:11 +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
|
7364def979
|
fix: theme('asset', path, name) 忽略指定主题的 bug
theme() 辅助函数 asset 分支只传了路径,丢弃第二个参数(主题名),导致主题管理页所有卡片都显示激活主题的截图。修复透传,并补回归测试
|
2026-08-12 04:05:25 +08:00 |
|
ak
|
4ff1848816
|
style: 插件卡片视觉层级重构(标题/元信息/描述/操作区分)
- 已安装插件卡片:图标块 + 标题 + vendor/版本元信息 + 状态徽章同一行(清晰层级),描述独立文本块,操作区与内容用分隔线隔开
- 插件市场卡片统一同款风格;全部关键布局用内联样式保证渲染稳定
|
2026-08-12 04:04:13 +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
|
88bba6eba3
|
feat: 开发期 workerman 热重载脚本(dev:watch)
- scripts/dev-watch.sh:优先 fswatch(brew install fswatch),未安装自动回退 PHP 轮询;监听 app/plugins/routes/config/.env 的 php/json 变化 → 自动 workerman:serve restart
- scripts/dev-watch.php:纯 PHP mtime 轮询兜底(跨平台,零依赖)
- composer 增加 dev:watch 命令
- 实测:touch 配置触发自动重启,新代码生效;生产仍用 restart 手动部署
|
2026-08-12 01:54: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
|
4d63c0c683
|
docs: 插件/主题开发文档补全新能力
- plugins.md:requires 依赖强制校验行为、filament.post_form/post_table 后台注入(追加写法 + 示例)、Payment payable 商品化约定(payableLabel/payableUrl)、paywall 视图覆盖机制
- themes.md:新增付费墙覆盖章节(membership.paywall / paid-teaser,主题同名文件可覆盖)
- README:插件段落补充依赖校验、后台注入钩子、订单商品化说明
|
2026-08-12 01:23:37 +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
|
19fd48213d
|
fix: 插件/主题卡片网格改用内联 grid(auto-fill 多列),修复自定义视图 Tailwind 类未编译导致单列的问题
|
2026-08-11 23:54:37 +08:00 |
|
ak
|
56735804a1
|
feat: Markdown 正文自动 TOC(锚点+折叠目录)+ 社交账号扩充国内平台(B站/小红书/抖音/视频号/公众号/其他)+ 侧边栏社交展示 + JSON-LD sameAs 全平台聚合 + 首页 h1(SEO 语义)
|
2026-08-11 23:49:19 +08:00 |
|
ak
|
489a145259
|
feat: 插件/主题管理卡片改用 Filament 原生组件+中文页面标题;注入点分三组管理(页面/侧边栏/文章);前台 sablog 主题全面语义化(header/nav/main/aside/section/footer)
|
2026-08-11 23:43:41 +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
|
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
|
e91675e172
|
test: 新增中文内容端到端回归测试(中文标签/无 slug 文章/中文分类),此前路由约束漏测导致 /tags/随笔.shtml 404
|
2026-08-11 23:07:57 +08:00 |
|
ak
|
c02fb063c7
|
fix: 标签/文章/分类 slug 路由约束放开为 [^/]+,支持中文标签(如 /tags/随笔.shtml),.shtml 字面后缀保证不冲突
|
2026-08-11 23:05:10 +08:00 |
|
ak
|
7622cd8e2a
|
feat: 前台整页响应缓存(匿名 GET,浏览量走 track-view 独立端点)+ 后台缓存管理页 + 侧边栏 nav-groups 负 margin 归零
|
2026-08-11 21:53:09 +08:00 |
|
ak
|
a5429b3ea4
|
feat: 后台内容区 full-width(maxContentWidth=Full)+ 侧边栏容器左右留白 12px 避免贴边
|
2026-08-11 21:38:27 +08:00 |
|
ak
|
dd7fe615e0
|
fix: BlogStats 浏览量 number_format 显式转 float(MySQL SUM 返回 string,strict_types 下 TypeError)
|
2026-08-11 21:34:22 +08:00 |
|
ak
|
b9f02df49f
|
feat: 后台侧边栏紧凑化(13rem + 自定义 CSS)+ 博客设置改 Tab 六分区(站点/外观/订阅SEO/评论/附件/维护),补回时间格式/评论排序/缩略图/水印等 sablog 设置项并接入实际使用
|
2026-08-11 21:30:56 +08:00 |
|
ak
|
6c7562115f
|
feat: 后台全中文(Filament zh_CN 语言包+资源中文label)+ 插件独立导航分组 + 插件/主题管理卡片化 + 主题预览图(无头浏览器生成)+ 两套主题移动端适配
|
2026-08-11 21:18:18 +08:00 |
|
ak
|
d0ae0f60ad
|
fix: modern 主题补全默认视图组件样式(侧边栏 widget/标签云/搜索框/profile/表格/付费提示等),修复切换后错位;header 补搜索框
|
2026-08-11 21:05:32 +08:00 |
|
ak
|
f213549af3
|
fix: 登录/注册/登出 POST 路由补 .shtml 变体(表单 route() 生成 .shtml 后缀),修复 405;新增 AuthFlow 回归测试;全面确认前台 URL 全部 route() 生成无硬编码
|
2026-08-11 21:02:07 +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
|
1c8a801238
|
refactor: Workerman 消费改用 Laravel Queue Worker,database/redis 统一支持(实测 redis 消费通过);默认消费 default,ai 队列;WORKERMAN_QUEUES/MAX_TRIES/TIMEOUT 配置;2 个队列消费测试
|
2026-08-11 19:27:43 +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
|
933736cfdd
|
M6: S3 附件支持(R2/COS/OSS)+ attachments:sync-s3 命令(Multipart/幂等),MinIO 实测通过
|
2026-08-11 18:35:17 +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 |
|
ak
|
8d526a8cfd
|
M0: Laravel 12 + Filament 5.7 脚手架,安装 spatie 全家桶/workerman/yansongda/pay,基础配置
|
2026-08-11 17:26:05 +08:00 |
|