AnQiCMS如何实现评论列表的分页显示和评论内容的点赞功能?

📅 👁️ 75

在网站运营中,用户评论和互动是提升内容活力的关键。安企CMS(AnQiCMS)提供了强大的内容管理能力,其中评论功能是用户与内容互动的重要桥梁。本文将详细探讨如何在安企CMS中实现评论列表的分页显示,以及为评论内容添加点赞功能,让您的网站互动体验更上一层楼。

安企CMS 评论功能概览

安企CMS从早期版本便已内置了文章评论和评论管理功能,这为网站提供了原生的用户互动支持。系统允许用户发表评论,并支持管理员在后台进行审核与管理,确保评论内容的质量和合规性。要展示这些评论,我们需要借助安企CMS提供的模板标签进行灵活调用。

实现评论列表的分页显示

当一篇文章的评论数量较多时,一次性加载所有评论不仅影响页面加载速度,也会降低用户体验。安企CMS提供了评论列表的分页功能,让您可以按需加载评论,保持页面整洁和高效。

要实现评论列表的分页显示,我们主要会用到两个关键的模板标签:commentList 用于获取评论数据,以及 pagination 用于生成分页导航。

  1. 使用 commentList 标签获取评论数据 commentList 标签是用来从数据库中检索评论数据的。为了实现分页,我们需要将 type 参数设置为 "page",并指定每页显示的评论数量 limit。此外,archiveId 参数是必不可少的,它指明了要获取哪篇文章的评论。通常,您会在文章详情页中使用此功能,此时 archive.Id 会自动提供当前文章的ID。

    以下是一个基本的 commentList 标签用法示例,它将获取当前文章的评论,并每页显示10条:

    {% commentList comments with archiveId=archive.Id type="page" limit="10" %}
        {# 遍历评论列表 #}
        {% for item in comments %}
            <div>
                {# 显示评论用户名,如果未审核则提示 #}
                <span>
                    {% if item.Status != 1 %}
                    审核中:{{item.UserName|truncatechars:6}}
                    {% else %}
                    {{item.UserName}}
                    {% endif %}
                </span>
                {# 如果是回复,显示回复对象 #}
                {% if item.Parent %}
                <span>回复</span>
                <span>
                    {% if item.Parent.Status != 1 %}
                    审核中:{{item.Parent.UserName|truncatechars:6}}
                    {% else %}
                    {{item.Parent.UserName}}
                    {% endif %}
                </span>
                {% endif %}
                {# 显示评论时间 #}
                <span>{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
            </div>
            <div>
                {# 显示评论内容,如果未审核则提示 #}
                {% if item.Parent %}
                <blockquote>
                    {% if item.Parent.Status != 1 %}
                    该内容正在审核中:{{item.Parent.Content|truncatechars:9}}
                    {% else %}
                    {{item.Parent.Content|truncatechars:100}}
                    {% endif %}
                </blockquote>
                {% endif %}
                {% if item.Status != 1 %}
                    该内容正在审核中:{{item.Content|truncatechars:9}}
                {% else %}
                {{item.Content}}
                {% endif %}
            </div>
            {# 此处可以放置点赞和回复按钮,下文将详细讲解点赞 #}
            <div class="comment-control" data-id="{{item.Id}}" data-user="{{item.UserName}}">
                <a class="item" data-id="praise">赞(<span class="vote-count">{{item.VoteCount}}</span>)</a>
                <a class="item" data-id="reply">回复</a>
            </div>
        {% endfor %}
    {% endcommentList %}
    

    在上述代码中:

    • archive.Id 是当前文章的ID,确保评论与文章关联。
    • type="page" 告诉系统我们需要分页数据。
    • limit="10" 设置每页显示10条评论。
    • item.Status != 1 用于判断评论是否已通过审核,未审核的评论可以显示为“审核中”。
    • item.Parent 用于显示回复评论的父评论信息,形成评论嵌套。
    • stampToDate 是一个方便的时间格式化函数。
  2. 使用 pagination 标签生成分页导航 获取到分页评论数据后,我们还需要一个分页导航,让用户能够跳转到不同的评论页。pagination 标签与 commentList 标签配合使用,能够自动生成符合当前页码状态的分页链接。

    commentList 标签的 {% endcommentList %} 之后,您可以添加 pagination 标签:

    <div>
        {% pagination pages with show="5" %}
            <ul>
                <li>总数:{{pages.TotalItems}}条,总共:{{pages.TotalPages}}页,当前第{{pages.CurrentPage}}页</li>
                <li class="{% if pages.FirstPage.IsCurrent %}active{% endif %}"><a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a></li>
                {% if pages.PrevPage %}
                    <li><a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a></li>
                {% endif %}
                {% for item in pages.Pages %}
                    <li class="{% if item.IsCurrent %}active{% endif %}"><a href="{{item.Link}}">{{item.Name}}</a></li>
                {% endfor %}
                {% if pages.NextPage %}
                    <li><a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a></li>
                {% endif %}
                <li class="{% if pages.LastPage.IsCurrent %}active{% endif %}"><a href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a></li>
            </ul>
        {% endpagination %}
    </div>
    

    这里,pagespagination 标签自动提供的分页信息对象,show="5" 表示最多显示5个页码按钮。您可以根据自己的设计需求来调整分页的显示样式和内容。

实现评论内容的点赞功能

为评论添加点赞功能,是提升用户互动性、鼓励优质评论的有效方式。安企CMS的点赞功能通过前端JavaScript发送异步请求(AJAX)与后端交互实现。

  1. 评论点赞的 HTML 结构 在每条评论的展示区域,我们需要一个可以点击的元素(例如 <a> 标签),并包含显示点赞数量的 <span>。关键在于为点赞元素添加 data-id 属性,存储当前评论的唯一ID,以便在点击时知道是哪条评论被点赞。

    <div class="comment-control" data-id="{{item.Id}}" data-user="{{item.UserName}}">
        <a class="item vote-comment" data-comment-id="{{item.Id}}">赞(<span class="vote-count">{{item.VoteCount}}</span>)</a>
        <a class="item" data-id="reply">回复</a>
    </div>
    

    这里,我们为点赞的 <a> 标签添加了 class="vote-comment"data-comment-id="{{item.Id}}",以及一个显示点赞数的 <span>,其 class="vote-count" 将用于后续的JavaScript更新。

  2. 评论点赞的 JavaScript 实现 点赞功能需要通过JavaScript监听点击事件,并向后端发送一个POST请求。安企CMS的评论点赞接口是 /comment/praise,它需要接收一个名为 id 的参数,即被点赞评论的ID。后端会处理点赞逻辑并返回最新的点赞数量。

    以下是一个使用jQuery实现点赞功能的JavaScript代码示例:

    ”`javascript $(document).ready(function() {

    $(".vote-comment").on("click", function (e) {
        e.preventDefault(); // 阻止默认的链接跳转行为
        let that = $(this);
        let commentId = that.data("comment-id"); // 获取评论ID
    
        // 发送点赞请求
        $.ajax({
            url: "/comment/praise",
            method: "POST", // 点赞通常是POST请求
            data: { id: commentId }, // 传递评论ID
            dataType: "json", // 期望后端返回JSON数据
            success: function (res) {
                if (res.code === 0) { // 假设 res.code == 0 表示成功
                    // 点赞成功,更新页面上的点赞数量
                    that.find(".vote-count").text(res.data.vote_count);
                    // 可以选择性地禁用点赞按钮,防止重复点赞
                    // that.addClass("liked").off("click");
                    alert(res.msg || "点赞成功!");
                } else {
                    // 点赞失败,显示错误信息
                    alert(res.msg ||
    

相关文章

如何在AnQiCMS中开启防采集干扰码和图片水印,以保护内容显示?

在数字化内容日益丰富的今天,保护网站上的原创内容显得尤为重要。安企CMS(AnQiCMS)深知内容创作者和企业用户的痛点,特别内置了防采集干扰码和图片水印功能,旨在帮助用户有效防止内容被恶意抓取和盗用,同时强化品牌标识。 ### 守护内容安全:启用防采集干扰码 原创内容的价值不言而喻,但网络上的信息采集工具却可能在未经许可的情况下大量复制您的文章,这不仅损害了原创者的权益,也可能分散网站流量

2025-11-08

如何在AnQiCMS模板中安全地将URL字符串解析为可点击的a标签?

在网站内容运营中,我们经常需要在文章、简介或自定义字段里展示一些网址、邮箱等信息。如果这些信息只是纯文本,用户就无法直接点击跳转,这不仅影响了用户体验,也可能降低内容的互动性和网站的SEO友好度。将这些URL字符串安全、智能地转换为可点击的`<a>`标签,是AnQiCMS模板中一个非常实用的功能。 AnQiCMS作为一个企业级内容管理系统,在设计之初就充分考虑了内容展示的灵活性与安全性

2025-11-08

AnQiCMS如何实现文章列表的筛选功能,根据自定义参数显示不同结果?

在网站运营中,如何让用户更便捷地找到他们需要的内容,是提升用户体验和转化率的关键。文章列表的筛选功能,就是实现这一目标的重要手段。安企CMS(AnQiCMS)提供了灵活且强大的机制,让我们可以根据自定义参数轻松地筛选并展示不同的文章列表结果,这对于打造个性化、高效率的内容平台非常有帮助。 ### 构建筛选功能的基石:自定义内容模型 要实现基于自定义参数的文章列表筛选

2025-11-08

如何在AnQiCMS模板中使用过滤器将时间戳转换为可读日期格式?

在网站运营中,我们经常需要在前端页面展示各种时间信息,比如文章发布日期、内容更新时间或者用户评论时间。AnQiCMS作为一个企业级内容管理系统,在数据存储时通常会采用Unix时间戳这种高效简洁的格式。然而,对于访问网站的用户来说,一串数字时间戳显然不够直观和友好。那么,如何在AnQiCMS的模板中,将这些时间戳转换为易于阅读的日期格式呢? AnQiCMS提供了一个非常实用的内置标签和过滤器

2025-11-08

如何在AnQiCMS模板中调试变量内容和类型(使用dump过滤器)?

在使用AnQiCMS搭建网站和定制模板时,我们经常会遇到这样的情况:页面上的内容显示不如预期,或者某个变量似乎没有正确传递。在这样的时刻,能够快速查看模板中变量的实际内容和数据类型,就显得尤为重要。幸运的是,AnQiCMS的模板引擎(它采用了类似Django的语法)为我们提供了一个非常实用的工具——`dump`过滤器,帮助我们轻松揭示变量的奥秘。 ### 核心功能:`dump`

2025-11-08

如何在多站点环境下,通过siteId参数调用其他站点的数据进行显示?

在AnQiCMS的多站点环境中,数据互通是提升运营效率、实现内容整合的关键一环。有时,我们可能需要在主站点上展示子站点的内容,或者在一个业务站点中调用另一个品牌站点的联系信息。这时候,AnQiCMS提供的`siteId`参数就显得尤为重要,它能帮助我们轻松实现跨站点的数据调用和显示。 ### 理解AnQiCMS的多站点优势 AnQiCMS设计之初就考虑到了多站点管理的需求

2025-11-08

AnQiCMS模板如何通过循环标签(for)遍历数组并控制显示样式?

在网站运营过程中,我们常常需要展示各种列表数据,比如文章列表、产品列表、图片画廊或者导航菜单。安企CMS(AnQiCMS)提供了一套基于 Go 语言模板引擎的强大机制,其中 `for` 循环标签是实现这一需求的核心工具。通过灵活运用 `for` 标签及其辅助功能,我们可以轻松遍历数组或列表数据,并根据实际需求精准控制每个元素的显示样式。 ### 安企CMS 模板中的循环标签 `for`

2025-11-08

如何在文章内容中设置规范链接(CanonicalUrl)并确保其在页面中正确显示?

在网站运营中,我们经常会遇到内容相似或重复的情况,这不仅可能分散搜索引擎的抓取预算,还可能稀释页面的权重,影响SEO表现。幸运的是,安企CMS为我们提供了设置规范链接(Canonical URL)的功能,这能有效帮助我们解决这些问题,明确告诉搜索引擎哪个页面才是内容的“原始”或“首选”版本。 ### 理解规范链接(Canonical URL)的价值 简单来说

2025-11-08