Features: - Add article view tracking with automatic deduplication (per user/IP) - Implement intelligent bot detection (35+ patterns: Google, Bing, Baidu, GPTBot, etc) - Create admin analytics dashboard with statistics and filtering - Display view count and comment count on article cards - Add search-based article filter (replaced dropdown for scalability) Analytics Dashboard: - Global stats: total views, human/bot views, unique IPs/users - Top 20 articles ranking with detailed metrics - Detailed view records with time, article, user, IP, user-agent - Filters: article title search, IP search, show/hide bots - Pagination support (50 records per page) Technical Implementation: - Async view recording (non-blocking) - Dual deduplication (application + database layer) - Database indexes for performance optimization - Batch query for comment counts - Full i18n support (Chinese/English) Files Added: - models/article_view.go: View tracking model - models/bot_detector.go: Bot detection logic - handlers/admin_analytics.go: Analytics page handler - templates/admin/analytics_views.html: Analytics UI - test_analytics.sh: Testing script - Documentation: implementation guide, usage guide, changelog Files Modified: - handlers/home.go: Add view recording and comment count queries - models/db.go: Add ArticleView to auto-migration - main.go: Add analytics routes - i18n/i18n.go: Add 35+ translation keys - templates/admin/dashboard.html: Add analytics entry link - templates/pages/home.html: Display view/comment counts on cards Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
主页文章卡片功能更新
新增功能:显示阅读量和评论数
效果展示
每篇文章卡片底部现在显示:
- 👁️ 阅读量:显示该文章被访问的次数
- 💬 评论数:显示已通过审核的评论数量
┌─────────────────────────────────────┐
│ 文章标题 [置顶] │
│ 文章摘要内容... │
│ │
│ 阅读全文 → 👁️ 123 💬 5 │
└─────────────────────────────────────┘
技术实现
1. 后端改动
HomePage Handler - 加载初始文章的评论数:
// 查询评论数
db.Model(&models.Comment{}).
Select("article_id, COUNT(*) as count").
Where("article_id IN ?", articleIDs).
Where("status = ?", models.CommentApproved).
Group("article_id").
Scan(&commentCounts)
// 传递给模板
data["CommentCounts"] = commentCountMap
HomeArticlesAPI Handler - 返回JSON格式的文章列表:
type ArticleResponse struct {
models.Article
CommentCount int64 `json:"comment_count"`
}
2. 前端改动
模板 (home.html):
<div class="flex items-center gap-4 text-sm text-gray-500">
<!-- 阅读量 -->
<span class="flex items-center gap-1">
<svg>眼睛图标</svg>
{{.ViewCount}}
</span>
<!-- 评论数 -->
<span class="flex items-center gap-1">
<svg>对话图标</svg>
<span class="comment-count">{{index $.CommentCounts .ID}}</span>
</span>
</div>
JavaScript 动态加载:
const commentCount = article.comment_count || 0;
const viewCount = article.view_count || 0;
数据来源
-
阅读量 (view_count):来自
articles.view_count字段- 每次访问文章时自动增加
- 显示所有访问次数(包括刷新)
-
评论数 (comment_count):来自
comments表统计- 只统计已通过审核的评论 (
status = 1) - 实时查询,保证准确性
- 只统计已通过审核的评论 (
性能优化
- 批量查询:使用
IN查询一次性获取所有文章的评论数 - 索引支持:
article_id和status字段都有索引 - 缓存友好:评论数在前端渲染,无需额外请求
样式细节
- 使用 Heroicons SVG 图标
- 灰色文字 (
text-gray-500) 不抢眼 - 与"阅读全文"按钮对齐
- 响应式设计,移动端友好
API 响应示例
{
"articles": [
{
"id": 5,
"title": "文章标题",
"view_count": 123,
"comment_count": 5,
...
}
],
"hasMore": true
}
文件变更
- ✅
handlers/home.go- 添加评论数查询逻辑 - ✅
templates/pages/home.html- 显示阅读量和评论数UI - ✅ JavaScript - 动态加载时包含统计信息
兼容性
- ✅ 向后兼容:如果没有评论,显示 0
- ✅ 支持无限滚动:新加载的文章也显示统计
- ✅ 支持SQLite和MySQL
用户体验
优势:
- 用户可以快速看到文章的热度
- 评论数激发互动兴趣
- 不需要点开文章就能了解活跃度
显示规则:
- 阅读量始终显示(即使是0)
- 评论数始终显示(即使是0)
- 数字简洁明了,不带单位
未来增强
可以考虑的改进:
- 📊 阅读量格式化(如 1.2k)
- 🔥 热度标记(高阅读量文章)
- ⭐ 点赞功能
- 📈 阅读趋势指示器
效果:让用户在浏览文章列表时就能看到每篇文章的热度和互动情况!📊