From 052803679a38bbd39f882e151125b314384da134 Mon Sep 17 00:00:00 2001 From: zhangchao Date: Thu, 20 Aug 2026 22:15:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=83=A8=E5=88=86=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/frontend/view.go | 37 ++++++++++++++++++++++++------------- static/js/frontend.js | 28 ++++++++++++++-------------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/handlers/frontend/view.go b/handlers/frontend/view.go index c419975..7728276 100644 --- a/handlers/frontend/view.go +++ b/handlers/frontend/view.go @@ -154,15 +154,11 @@ type PostDetailData struct { Description string Post models.Post Pages []models.Page - Comments []models.Comment - CommentCount int64 Year int PrevPost *models.Post // 上一篇 NextPost *models.Post // 下一篇 - // 评论展示设置与分页 - ShowComments bool - CommentPage int - CommentTotalPages int + ShowComments bool + CommentCount int64 // Sidebar 数据 Categories []models.Category Tags []models.Tag @@ -206,6 +202,19 @@ func PostView(c *gin.Context) { pages := loadPublishedPages() + showComments := true + if v, optErr := models.GetOptionValue(database.DB, models.OptionShowComments, 0); optErr == nil { + showComments = v != "0" + } + + // 统计评论数 + if showComments { + var commentCount int64 + database.DB.Model(&models.Comment{}).Where("post_id = ? AND status = ?", post.ID, "approved").Count(&commentCount) + } + var commentCount int64 + database.DB.Model(&models.Comment{}).Where("post_id = ? AND status = ?", post.ID, "approved").Count(&commentCount) + // 获取上一篇(发布时间更早的文章) var prevPost models.Post prevErr := database.DB.Where("status = ? AND published_at < ?", "published", post.PublishedAt). @@ -220,13 +229,15 @@ func PostView(c *gin.Context) { categories, tags, postCount, categoryCount, tagCount := loadSidebarData() data := PostDetailData{ - Title: post.Title, - SiteName: siteName, - SiteDesc: siteDesc, - Description: post.Summary, - Post: post, - Pages: pages, - Year: time.Now().Year(), + Title: post.Title, + SiteName: siteName, + SiteDesc: siteDesc, + Description: post.Summary, + Post: post, + Pages: pages, + Year: time.Now().Year(), + ShowComments: showComments, + CommentCount: commentCount, // Sidebar 数据 Categories: categories, Tags: tags, diff --git a/static/js/frontend.js b/static/js/frontend.js index 3e09916..711e2a8 100644 --- a/static/js/frontend.js +++ b/static/js/frontend.js @@ -3,15 +3,15 @@ */ // 评论分页加载 -async function loadComments(postSlug, page = 1) { +async function loadComments(postID, page = 1) { try { - const url = `/posts/${postSlug}/comments?page=${page}`; + const url = `/posts/${postID}/comments?cpage=${page}`; const res = await fetch(url); if (!res.ok) throw new Error('加载评论失败'); const data = await res.json(); - renderComments(data.data || [], postSlug); - renderCommentPagination(data.page, data.total_pages, postSlug); + renderComments(data.data || []); + renderCommentPagination(data.page, data.total_pages, postID); } catch (err) { console.error('加载评论失败:', err); document.querySelector('.comments-list').innerHTML = '

评论加载失败

'; @@ -19,7 +19,7 @@ async function loadComments(postSlug, page = 1) { } // 渲染评论列表 -function renderComments(comments, postSlug) { +function renderComments(comments) { const listEl = document.querySelector('.comments-list'); if (!listEl) return; @@ -66,7 +66,7 @@ function buildCommentHTML(comment) { } // 渲染评论分页 -function renderCommentPagination(currentPage, totalPages, postSlug) { +function renderCommentPagination(currentPage, totalPages, postID) { const paginationEl = document.querySelector('.comment-pagination'); if (!paginationEl) return; @@ -79,13 +79,13 @@ function renderCommentPagination(currentPage, totalPages, postSlug) { let html = ''; if (currentPage > 1) { - html += ``; + html += ``; } html += `${currentPage} / ${totalPages}`; if (currentPage < totalPages) { - html += ``; + html += ``; } paginationEl.innerHTML = html; @@ -129,8 +129,8 @@ async function submitComment(e) { alert('评论提交成功,等待审核'); form.reset(); // 重新加载评论(回到第一页) - const postSlug = window.location.pathname.split('/').pop(); - loadComments(postSlug, 1); + const postID = form.querySelector('input[name="post_id"]').value; + loadComments(postID, 1); } else { alert(result.error || '提交失败'); } @@ -171,12 +171,12 @@ document.addEventListener('DOMContentLoaded', function() { commentForm.addEventListener('submit', submitComment); } - // 如果当前是文章详情页,自动加载评论 - const postSlug = window.location.pathname.match(/\/post\/([^\/]+)/); - if (postSlug && postSlug[1]) { + // 如果当前是文章详情页,使用表单中的数字 postID 加载评论 + const postIDInput = commentForm && commentForm.querySelector('input[name="post_id"]'); + if (postIDInput && postIDInput.value) { // 从 URL 获取初始页码 const urlParams = new URLSearchParams(window.location.search); const cpage = parseInt(urlParams.get('cpage')) || 1; - loadComments(postSlug[1], cpage); + loadComments(postIDInput.value, cpage); } });