gouki
dec02f583a
feat(media): use legacy filepath structure for attachments via custom path generator
Build and Deploy / verify (push) Failing after 11m47s
Build and Deploy / deploy (push) Skipped
2026-10-12 08:58:19 +00:00
gouki
3aed6771b0
fix(theme): widen main container from 960px to 1380px for modern screens
Build and Deploy / verify (push) Successful in 29s
Build and Deploy / deploy (push) Successful in 26s
2026-10-11 19:32:28 +00:00
gouki
13f017e806
fix(import): preserve original attachment filepath structure; enable admin SPA mode
Build and Deploy / verify (push) Successful in 31s
Build and Deploy / deploy (push) Successful in 28s
2026-10-11 19:31:11 +00:00
gouki
faf70ec5f4
fix(import): use sablog_articles.keywords for tags instead of sablog_tags.aids
Build and Deploy / verify (push) Successful in 33s
Build and Deploy / deploy (push) Successful in 37s
2026-10-11 19:25:36 +00:00
gouki and Cursor
debead72a5
feat: add frontend admin shortcut for staff
...
Build and Deploy / verify (push) Failing after 15m18s
Build and Deploy / deploy (push) Skipped
Let admin and editor open /admin in a new tab from the public header and profile, so they can jump to the backend without leaving the site.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-21 23:42:54 +00:00
gouki and Cursor
36c4ffc5b4
fix: restyle pager chips and restore theme ad slots
...
Build and Deploy / verify (push) Successful in 37s
Build and Deploy / deploy (push) Successful in 38s
Replace the loose page-count label with a SaBlog-style 6 / 316 chip, wire inject/stylevar HTML into list and post views, and flush page cache when ads are saved.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-18 21:48:24 +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
b39423831c
test(legacy): align expectations with sablog canonical URLs
Build and Deploy / verify (push) Successful in 40s
Build and Deploy / deploy (push) Successful in 32s
2026-09-16 23:06:53 +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
79dfa0d88c
fix(routes): remove duplicate /tag/{name} legacy route shadowing canonical
Build and Deploy / verify (push) Successful in 59s
Build and Deploy / deploy (push) Successful in 31s
2026-09-09 21:28:03 +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
f6a9a8ea50
fix(renderer): render [attach=xx] as <img> for image attachments (legacy sablog behavior)
Build and Deploy / verify (push) Successful in 1m0s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 22:32:22 +00:00
gouki
46428ce02f
fix(routes): legacy sablog .shtml URLs 301 alongside .html
Build and Deploy / verify (push) Successful in 58s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 20:04:44 +00:00
gouki
e0c709ad5c
fix(import): null out orphan category references (FK safe)
Build and Deploy / verify (push) Successful in 1m0s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 19:55:19 +00:00
gouki
66ce4bce0a
fix(import): guard epoch-0 datetimes for MySQL 5.7 TIMESTAMP range
Build and Deploy / verify (push) Successful in 59s
Build and Deploy / deploy (push) Successful in 29s
2026-09-07 19:47:45 +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
gouki
6f1a25f7fa
ci: retrigger after env password quoting fix
Build and Deploy / verify (push) Successful in 1m13s
Build and Deploy / deploy (push) Failing after 35s
2026-09-07 19:28:09 +00:00
gouki
1add059bcc
ci: retrigger deploy after storage skeleton fix
Build and Deploy / verify (push) Successful in 1m11s
Build and Deploy / deploy (push) Failing after 23s
2026-09-07 19:24:08 +00:00
gouki
06e73d49d0
ci: deploy via php83-ex; ignore ext-exif in verify (CI image lacks it)
Build and Deploy / verify (push) Successful in 1m13s
Build and Deploy / deploy (push) Failing after 26s
2026-09-07 19:19:43 +00:00
gouki
9fdbb55218
ci: fix step order - touch sqlite before composer, drop premature key:generate
Build and Deploy / verify (push) Failing after 7s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:13:39 +00:00
gouki
2301f7075e
ci: prepare sqlite env in verify job; remove GitHub-only workflow
Build and Deploy / verify (push) Failing after 5s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:10:18 +00:00
gouki
b491c8ac86
ci: add Gitea Actions deploy workflow for laralog.neatstudio.com
Build and Deploy / verify (push) Failing after 7s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:04:14 +00:00
ak
43dc8f9856
docs: 安装/导入文档 + 部署文档刷新 + workerman 进程文件收归 storage
...
CI / test (push) Failing after 7s
CI / deploy (push) Skipped
- docs/install.md:全新安装指南(环境要求/.env/验收清单/常见问题)
- docs/import.md:Sablog 导入全解(命令参数表/数据映射/附件短代码/301 兼容/S3 同步/幂等重跑/检查清单)
- docs/deploy.md:补生产迁移顺序、上线前检查清单、调度器实际内容
- Workerman 进程文件(pid/status/log)统一写入 storage/framework 与 storage/logs,不再出现在项目根目录;.gitignore 排除并清理根目录残留
- README 文档导航补 install/import
2026-08-13 05:00:22 +08:00
ak
6f13d13d5a
chore: 上线前加固——调度器/登录限流/env 模板补全
...
- routes/console.php:注册每日数据库备份(03:00)+ 前台页面缓存清理(04:00)
- 前台登录/注册 POST 加 throttle:6,1 防爆破
- .env.example 补 S3/LLM/MARKET/UPLOAD_DISK 配置项,新部署不再漏配
2026-08-13 03:32:27 +08: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
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