如何在AnQiCMS中显示用户评论列表并进行分页处理?

📅 👁️ 63

在网站内容运营中,用户评论是提升互动性和活跃度的重要组成部分,而合理的分页处理则能确保评论列表既完整又加载流畅。安企CMS(AnQiCMS)提供了强大且灵活的模板标签,让您能够轻松地在前端页面展示和管理用户评论,并实现评论列表的分页功能。

展现用户评论列表的基石:commentList 标签

要在安企CMS的页面上显示用户评论,我们主要会用到 commentList 标签。这个标签能够帮助您获取特定文章或产品的评论数据。它就像一个评论数据的提取器,您可以根据自己的需求来配置它。

当您在模板中使用 commentList 标签时,可以先给它指定一个变量名,比如 comments,这样后续在循环展示评论时就能够引用这个变量。一个典型的用法是这样开始:{% commentList comments with archiveId=archive.Id type="list" limit="6" %}

这里面的 archiveId 参数至关重要,它告诉系统您想获取哪篇文章或产品的评论。通常,这个值会动态地从当前文档的ID中获取,比如 archive.Idtype 参数定义了评论列表的展示方式,"list" 模式会返回指定数量的评论,而 "page" 模式则会为分页做准备。limit 参数则用于控制每页或每次显示多少条评论。

每个评论条目都包含了一系列有用的信息,例如:

  • Id:评论的唯一标识。
  • UserName:评论者的名称。
  • Content:评论的具体内容。
  • CreatedTime:评论发布的时间,这是一个时间戳,您可以结合 stampToDate 标签进行格式化显示,例如 {{stampToDate(item.CreatedTime, "2006-01-02")}}
  • Parent:如果这条评论是对其他评论的回复,那么 Parent 字段会包含上级评论的详细信息,这对于构建多级评论回复至关重要。
  • Status:评论的审核状态,通常 1 表示审核通过,其他值可能表示审核中或未通过,您可以根据此状态来决定是否显示评论内容。
  • VoteCount:评论的点赞数量,可以用来显示评论的受欢迎程度。

下面是一个基础的评论列表展示示例,它会获取当前文档的评论,并显示前6条,同时处理了评论的审核状态和回复关系:

{# 列表展示评论,默认type="list" #}
<div>
{% commentList comments with archiveId=archive.Id type="list" limit="6" %}
    {% for item in comments %}
    <div>
      <div>
        <span>
          {% if item.Status != 1 %}
          审核中:{{item.UserName|truncatechars:6}} {# 截取用户名显示 #}
          {% else %}
          {{item.UserName}}
          {% endif %}
        </span>
        {% if item.Parent %} {# 如果是回复评论 #}
        <span>回复</span>
        <span>
          {% if item.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>
    </div>
    {% endfor %}
{% endcommentList %}
</div>

结合 pagination 标签实现评论列表分页

当评论数量较多时,一次性加载所有评论会影响页面性能和用户体验。这时,就需要引入分页功能。在安企CMS中,实现评论分页非常简单,只需要将 commentList 标签的 type 参数设置为 "page",然后配合 pagination 标签即可。

commentListtype 设置为 "page" 后,它会返回一个包含当前页评论数据和分页信息 pages 对象的数据结构。这个 pages 对象就是 pagination 标签的输入。

pagination 标签允许您灵活地控制分页链接的显示方式。其中最常用的参数是 show,它用来控制页面上显示多少个页码按钮,例如 show="5" 会显示当前页附近最多5个页码。

pages 对象提供了以下关键信息,让您可以构建完整的分页导航:

  • TotalItems:评论总数量。
  • TotalPages:总页码数。
  • CurrentPage:当前访问的页码。
  • FirstPageLastPagePrevPageNextPage:分别代表首页、末页、上一页和下一页的链接和状态,它们内部也包含 Link(链接地址)和 IsCurrent(是否为当前页)等字段。
  • Pages:一个包含所有中间页码信息的数组,您可以遍历这个数组来显示数字页码。

下面是一个完整的、带有分页功能的评论列表展示代码:

{# 启用分页模式的评论列表 #}
<div>
{% commentList comments with archiveId=archive.Id type="page" limit="10" %} {# type="page" 启用分页 #}
    {% for item in comments %}
    <div>
      <div>
        <span>
          {% if item.Status != 1 %}
          审核中:{{item.UserName|truncatechars:6}}
          {% else %}
          {{item.UserName}}
          {% endif %}
        </span>
        {% if item.Parent %}
        <span>回复</span>
        <span>
          {% if item.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>
    </div>
    {% endfor %}
{% endcommentList %}
</div>

{# 分页导航区域 #}
<div class="pagination-area">
    {% pagination pages with show="5" %} {# show="5" 表示最多显示5个页码按钮 #}
    <ul>
        <li>总数:{{pages.TotalItems}}条,共:{{pages.TotalPages}}页,当前第{{pages.CurrentPage}}页</li>
        {# 首页链接 #}
        <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
            <a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
        </li>
        {# 上一页链接 #}
        {% if pages.PrevPage %}
            <li class="page-item">
                <a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
            </li>
        {% endif %}
        {# 中间数字页码 #}
        {% for item in pages.Pages %}
            <li class="page-item {% if item.IsCurrent %}active{% endif %}">
                <a href="{{item.Link}}">{{item.Name}}</a>
            </li>
        {% endfor %}
        {# 下一页链接 #}
        {% if pages.NextPage %}
            <li class="page-item">
                <a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
            </li>
        {% endif %}
        {# 末页链接 #}
        <li class="page-item {% if pages.LastPage.IsCurrent %}active{% endif %}">
            <a href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
        </li>
    </ul>
    {% endpagination %}
</div>

评论提交与互动

除了显示评论,安企CMS也支持用户通过表单提交评论。评论表单的 action 属性应指向 /comment/publish。提交时需要包含 archive_id (文章ID)、user_name (评论者昵称)和 content (评论内容)。如果需要实现回复功能,还需要包含 parent_id 字段,值为被回复评论的ID。此外,您可以通过 return 字段指定后端返回格式为 htmljson

例如,一个基本的评论提交表单可能像这样:

<form method="post" action="/comment/publish">
  <input type="hidden" name="archive_id" value="{% archiveDetail with name="Id" %}">
  <input type="hidden" name="return" value="html"> {# 可以设置为json,如果需要JS处理返回 #}
  <div>
    <label for="user_name">您的昵称</label>
    <input type="text" id="user_name" name="user_name" required placeholder="请填写您的昵称">
  </div>
  <div>
    <label for="comment-content">评论内容</label>
    <textarea id="comment-content" name="content" rows="5" required placeholder="请留下您的宝贵评论..."></textarea>
  </div>
  {# 如果是回复评论,这里会动态添加一个hidden input #}
  <input type="hidden" name="parent_id" value=""> 
  <button type="submit">提交评论</button>
</form>

此外,安企CMS还提供了评论点赞功能,通过向 /comment/praise 地址 POST 评论 id 即可实现点赞,这通常需要通过 JavaScript 来完成。为了增强评论的安全性,您也可以在后台开启评论验证码功能,并在前端模板中添加相应的验证码显示和输入框,这会用到 tag-/anqiapi-other/167.html 中详细介绍的 api/captcha 接口。

通过以上这些标签和功能,您可以全面地在安企CMS网站上构建一个交互性强、用户体验友好的评论系统。


常见问题 (FAQ)

Q1: 如何在评论表单中加入验证码以防止垃圾评论?

A1: 安企CMS 支持在评论提交时集成验证码功能。您首先需要在后台的“功能管理”中找到相关设置,启用评论验证码。然后,在您的评论提交表单中,根据 tag-/anqiapi-other/167.html 文档的指引,添加一个 captcha_id 的隐藏字段、一个 captcha 的文本输入框以及一个用于显示验证码图片的 <img> 标签,并附带一段 JavaScript 代码,用于从 /api/captcha 接口获取并刷新验证码图片。

Q2: 安企CMS 是否支持多级评论回复的显示?

A2: 是的,安企CMS 原生支持多级评论回复的显示。在 commentList 标签获取到的每个评论 item 对象中,如果这条评论是对其他评论的回复,那么 item.Parent 字段会包含上级评论的完整信息。您可以通过判断 item.Parent 是否存在,来判断当前评论是否为回复,并在模板中通过 item.Parent.UserNameitem.Parent.Content 等字段来构建回复引用,从而实现多级评论的视觉呈现。

**Q3: 评论提交后,前端如何知道评论是否需要审核或已

相关文章

如何利用AnQiCMS的标签显示特定Tag下的文档列表?

在AnQiCMS中,标签(Tag)是一种强大的内容组织方式,它能帮助我们更灵活地关联不同分类、不同模型下的内容。合理利用标签不仅能优化网站的SEO表现,还能显著提升用户在网站上的内容发现体验。当我们希望集中展示某一特定标签下的所有相关文档时,AnQiCMS提供了一套直观且高效的模板标签来实现这一需求。 本文将详细介绍如何通过AnQiCMS的内置模板标签

2025-11-08

AnQiCMS如何显示相关文档列表,其逻辑是什么?

在内容管理系统中,如何有效地引导用户发现更多感兴趣的内容,是提升用户体验和网站深度的关键。AnQiCMS在处理“相关文档列表”这一功能时,提供了一套灵活且智能的机制,让我们可以轻松地在网站上展示与当前内容紧密关联的其他文章或产品,这不仅有助于延长用户在网站上的停留时间,也能通过内部链接优化提升搜索引擎的抓取效率。 ### AnQiCMS

2025-11-08

如何在AnQiCMS文档详情页显示自定义字段的内容?

在AnQiCMS中管理网站内容时,我们经常会遇到需要为不同类型的文档(例如文章、产品等)添加一些独特信息的需求。安企CMS提供了灵活的内容模型功能,允许我们自定义字段来满足这些个性化需求。那么,当这些自定义字段被创建并填充数据后,如何在网站的文档详情页面中将它们展示出来呢? 这实际上比您想象的要简单,AnQiCMS强大的模板标签系统为我们提供了多种便捷的方式来实现这一点。 --- ###

2025-11-08

如何在AnQiCMS模板中实现上一篇和下一篇文档的链接显示?

在浏览网站内容时,用户往往希望能够方便地在相关文章之间跳转。无论是为了寻找更多信息,还是仅仅享受流畅的阅读体验,“上一篇”和“下一篇”文档链接都扮演着至关重要的角色。它们不仅能有效提升用户在网站上的停留时间,降低跳出率,对于网站的内部链接结构和搜索引擎优化(SEO)也有着积极的推动作用,帮助搜索引擎更好地理解网站内容的相关性。 ### 核心功能解析:AnQiCMS

2025-11-08

AnQiCMS的留言表单标签如何获取并显示自定义的表单字段?

在使用安企CMS(AnQiCMS)管理网站内容时,在线留言功能无疑是与访客互动、收集反馈或潜在客户信息的重要途径。除了基本的姓名、联系方式和留言内容,很多时候我们还需要收集更具体、个性化的信息,例如“您的项目预算”、“感兴趣的服务类型”或“期望联系时间”等。安企CMS提供了灵活的自定义留言字段功能,让我们可以轻松实现这些需求。那么,如何在网站前台页面上获取并优雅地显示这些自定义的留言表单字段呢

2025-11-08

如何在AnQiCMS中显示分页链接,并控制页码的显示数量?

在网站运营中,高效地管理和展示大量内容是提升用户体验的关键。当内容列表过长时,合理的分页机制不仅能让用户更容易浏览,也能优化页面加载速度,间接提升搜索引擎友好度。在AnQiCMS中,实现分页功能并灵活控制页码的显示数量,是一个相对直接且功能强大的过程。 --- ## 在AnQiCMS中优雅地显示分页链接与灵活控制页码数量 在您的AnQiCMS网站中,当文章、产品或其他列表内容增多时

2025-11-08

AnQiCMS如何设置和显示网站的全局信息,如Logo、备案号和版权?

AnQiCMS 提供了直观且强大的方式来管理和展示网站的全局信息,例如网站 Logo、备案号以及版权声明。这些信息不仅是网站品牌形象的重要组成部分,也关乎网站的合法合规运营。接下来,将详细介绍如何设置和利用这些全局信息。 ### 在后台进行全局信息设置 所有网站的全局信息都集中在 AnQiCMS 后台的“全局功能设置”中。只需登录后台,通过左侧菜单导航至 **“后台设置”**,然后点击

2025-11-08

如何在AnQiCMS中实现有条件的逻辑判断来控制内容的显示?

在网站运营中,根据不同的条件展示不同的内容是提升用户体验和实现精细化运营的关键。安企CMS(AnQiCMS)提供了强大而灵活的模板标签和逻辑判断功能,让我们可以轻松实现内容的条件显示,从而满足多样化的业务需求。 本文将深入探讨如何在AnQiCMS中利用其模板引擎的特性,通过条件逻辑判断来精确控制网站内容的显示。 ### 灵活多变的条件判断基础:`if` 标签 AnQiCMS

2025-11-08