在 AnQiCMS 模板中优雅地展示文章评论列表与分页
文章评论是网站互动的重要组成部分,它不仅能提升用户参与度,还能为网站内容带来更丰富的讨论和价值。对于运营者来说,如何在页面上清晰、高效地展示这些评论,并支持分页功能,是提升用户体验的关键。AnQiCMS 提供了一套直观且强大的模板标签,让您轻松实现这一目标。
了解 AnQiCMS 模板基础
AnQiCMS 采用类似 Django 的模板引擎语法,这使得模板开发既灵活又易于上手。在模板文件中,您会看到两种主要的标签形式:双花括号 {{变量}} 用于输出变量内容,而单花括号和百分号 {% 标签 %} 则用于控制逻辑(如循环、条件判断)或调用特定功能。模板文件通常以 .html 为后缀,并统一存放在 /template 目录下。
要实现在文章详情页显示评论列表并支持分页,我们主要会用到两个核心标签:commentList 用于获取评论数据,以及 pagination 用于生成分页导航。
获取文章评论列表:commentList 标签
commentList 标签是 AnQiCMS 中专门用于获取文章评论数据的工具。它能帮您轻松地将某个文章下的评论提取出来。
在使用这个标签时,有几个关键参数需要您留意:
archiveId:这是最重要的参数,它告诉系统您想获取哪篇文章的评论。通常,在文章详情页中,当前文章的 ID 会自动作为archive.Id这样的变量提供。type:这个参数决定了您想要获取的列表类型。如果设置为list,它会简单地返回指定数量的评论;如果设置为page,它会为评论列表启用分页功能,以便后续配合pagination标签使用。limit:用于控制每页显示多少条评论。例如,limit="10"意味着每页显示 10 条评论。order:您可以指定评论的排序方式,例如按 ID 降序 (id desc) 或升序 (id asc)。
当您通过 commentList 标签获取到评论数据后,它会返回一个评论对象的数组。您可以对这个数组进行循环,并访问每个评论对象的属性,比如评论 ID (Id)、用户名 (UserName)、评论内容 (Content)、点赞数 (VoteCount)、创建时间 (CreatedTime) 等。值得一提的是,评论内容还可能包含回复(即 Parent 对象),以及评论的审核状态 (Status),这些信息都可以通过条件判断在模板中灵活展示。
实现评论分页功能:pagination 标签
一旦 commentList 标签的 type 参数设置为 page,评论数据就具备了分页的能力。此时,pagination 标签便能大显身手,为您自动生成一套完整的分页导航。
pagination 标签常用的参数是 show,它指定了分页导航中最多显示多少个页码按钮,例如 show="5" 会显示当前页附近最多 5 个页码。
pagination 标签会提供一个包含总条数 (TotalItems)、总页码数 (TotalPages)、当前页码 (CurrentPage)、首页 (FirstPage)、末页 (LastPage)、上一页 (PrevPage)、下一页 (NextPage),以及中间页码数组 (Pages) 等信息的对象。您可以通过循环 Pages 数组来构建页码按钮,并通过 IsCurrent 属性判断当前页,从而添加相应的样式。
在模板中实际操作
通常,我们会在 archive/detail.html 这样的文章详情模板中集成评论功能。
首先,确保您能获取到当前文章的 ID。在文章详情页中,这通常通过 {{archive.Id}} 直接获取,或者使用 {% archiveDetail archiveInfo with name="Id" %} 来更显式地获取。
接着,我们就可以构建评论列表和分页了。
展示评论列表
以下代码片段展示了如何在文章详情页模板中显示评论列表,并处理评论的审核状态和回复关系:
”`twig {# 获取当前文章的ID,以便关联评论 #} {% archiveDetail currentArchiveId with name=“Id” %}
读者评论
{# 评论分页代码 #}
<div class="comment-pagination">
{% pagination pages with show="5" %}
<ul>
<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>
{# 评论提交表单 #}
<div class="comment-form-section">
<h3>发表评论</h3>
<form method="post" action="/comment/publish" class="comment-submit-form">
<input type="hidden" name="return" value="html">
<input type="hidden" name="archive
{% if item.Status != 1 %} 该内容正在审核中:{{ item.Content|truncatechars:100 }} {% else %} {{ item.Content|safe }} {% endif %}
暂无评论,快来发表您的看法吧!
{% endfor %} {% endcommentList %}