- Add custom publish time field to article create/edit forms - Support datetime-local input for manual time setting - Auto-set on first publish if left blank - Works for both admin and user article forms - Display last updated time on article detail page - Show both published time and last updated time - Auto-maintained by GORM on each update - Format: YYYY-MM-DD HH:MM - Add i18n support for new fields - article_published_at: Published Time / 发布时间 - article_published_at_hint: Leave blank to auto-set on publish / 留空则在发布时自动设置 - article_last_updated: Last Updated / 最后更新 - Update handlers and templates - handlers/article.go: Add parsePublishedAt/formatPublishedAt functions - handlers/home.go: Add formatUpdateTime function - handlers/my_articles.go: Support custom publish time in user articles - templates: Add datetime-local inputs and time display Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.6 KiB
3.6 KiB
文章发布时间编辑功能
功能概述
为博客系统的文章编辑页面添加了自定义发布时间的功能,允许管理员和普通用户在创建或编辑文章时手动设置发布时间。
修改的文件
1. 前端模板
/templates/admin/article_create.html
- 在"置顶"选项前添加了发布时间输入框
- 使用
datetime-local类型的输入框,支持选择日期和时间 - 添加提示文本:留空则在发布时自动设置
/templates/user/my_article_form.html
- 在状态选择框前添加了发布时间输入框
- 使用相同的
datetime-local输入框 - 添加相应的提示文本
2. 后端处理器
/handlers/article.go
- 修改
articleForm结构体,添加PublishedAt string字段 - 修改
parseArticleForm()函数,解析表单中的published_at字段 - 修改
applyFormToData()函数,将PublishedAt传递给模板 - 添加
parsePublishedAt()函数:解析 datetime-local 格式的时间字符串 - 添加
formatPublishedAt()函数:将时间格式化为 datetime-local 格式用于表单回显 - 修改
ArticleEditPage()函数:在编辑页面回显发布时间 - 修改
ArticleUpdate()函数:- 如果用户提供了自定义发布时间,则使用该时间
- 否则保持原有逻辑(首次发布时自动设置当前时间)
- 修改
ArticleCreate()函数:- 如果用户提供了自定义发布时间,则使用该时间
- 否则在发布时自动设置当前时间
/handlers/my_articles.go
- 修改
MyArticleEditPage()函数:在编辑页面回显发布时间 - 修改
MyArticleUpdate()函数:- 如果用户提供了自定义发布时间,则使用该时间
- 否则保持原有逻辑(首次发布时自动设置当前时间)
3. 国际化文本
/i18n/i18n.go
添加了以下翻译键:
article_published_at: "Published Time" / "发布时间"article_published_at_hint: "Leave blank to auto-set on publish" / "留空则在发布时自动设置"
功能特性
-
自定义发布时间:用户可以手动设置文章的发布时间,适用于:
- 导入历史文章时保留原始发布时间
- 预设未来的发布时间(虽然文章会立即可见)
- 修正错误的发布时间
-
自动时间戳:如果用户不填写发布时间:
- 保存为草稿:不设置发布时间
- 首次发布:自动设置为当前时间
- 已发布文章再次编辑:保持原发布时间不变
-
向后兼容:
- 现有的自动时间戳逻辑完全保留
- 只有在用户明确输入时间时才会覆盖自动时间
-
双语支持:中英文界面均已适配
使用方法
管理员编辑页面
- 访问
/admin/articles/:id/edit或/admin/articles/new - 在"发布时间"字段中选择日期和时间
- 留空则使用自动时间戳
普通用户编辑页面
- 访问
/my/articles/:id/edit或/my/articles/new - 在"发布时间"字段中选择日期和时间
- 留空则使用自动时间戳
技术实现
- 时间格式:使用 HTML5
datetime-local输入类型,格式为2006-01-02T15:04 - 时区处理:使用服务器的本地时区 (
time.Local) 进行解析和格式化 - 数据库:
published_at字段类型为*time.Time(可为空)
测试建议
- 创建新文章时设置自定义发布时间
- 创建新文章时留空发布时间(应自动设置)
- 编辑已发布文章并修改发布时间
- 编辑已发布文章但不修改发布时间(应保持原时间)
- 将草稿改为发布状态(应自动设置发布时间或使用自定义时间)
- 测试中英文界面的显示