在网站运营中,用户留言和文章评论是促进互动、提升内容价值的重要组成部分。对于安企CMS的用户来说,合理地展示这些用户生成内容,并有效地管理它们的审核状态,是确保网站内容质量和用户体验的关键。下面我们将详细探讨在安企CMS中如何实现这一目标。

了解安企CMS中的评论与留言管理

安企CMS为用户提供了方便的内容评论和网站留言管理功能。在后台管理界面,您可以通过“功能管理”菜单找到“内容评论”和“网站留言”这两个模块。这里是集中管理所有用户提交评论和留言的地方。

作为网站管理员,您可以:

  • 查看所有用户提交的评论和留言。
  • 对评论和留言进行审核,决定它们是否在前台显示。
  • 删除不当内容,维护网站的健康环境。
  • 导出留言数据,方便后续处理和分析。

安企CMS的设计考虑到了网站内容的安全和合规性,因此,管理后台是您掌控用户互动内容的第一道防线。

在前端页面展示评论或留言列表

要在网站前台显示用户评论或留言,我们需要在模板文件中使用安企CMS提供的特定标签。对于文章评论,核心是 commentList 标签;对于网站留言,虽然文档中主要介绍了留言表单的构建,但通常列表的展示逻辑与评论列表类似,都是通过循环数据来实现。

显示文章评论列表

假设我们要在文章详情页显示评论列表。首先,您需要在模板文件中,例如 comment/list.html(这是安企CMS约定的评论列表页模板),或者直接在文章详情页模板中,引入 commentList 标签。

commentList 标签是获取评论数据的关键。它允许您根据需要过滤和排序评论,其基本用法如下:

{% commentList comments with archiveId=archive.Id type="page" limit="10" %}
    {# 评论循环体 #}
{% endcommentList %}

这里 archiveId=archive.Id 表示获取当前文章(由 archive.Id 标识)的评论。type="page" 意味着您希望进行分页显示,limit="10" 则设定了每页显示10条评论。

commentList 标签的循环体内部,您可以通过 item 变量访问每条评论的详细信息。一些常用的字段包括:

  • item.Id: 评论的唯一标识。
  • item.UserName: 评论用户的昵称。
  • item.Content: 评论的具体内容。
  • item.CreatedTime: 评论发布的时间,需要使用 stampToDate 标签进行格式化显示,例如 {{stampToDate(item.CreatedTime, "2006-01-02 15:04")}}
  • item.Status: 评论的审核状态,这是处理审核状态的核心字段。
  • item.Parent: 如果这是一条回复评论,Parent 字段将包含被回复评论的完整数据,您可以用它来构建评论的嵌套回复结构。

处理审核状态

item.Status 字段的值决定了评论的显示方式:

  • Status = 1 时,表示评论已通过审核,可以正常显示。
  • Status = 0 时,表示评论正在审核中。在这种情况下,您可以选择不显示这条评论,或者显示一个“评论正在审核中”的提示信息,以告知用户。

结合以上字段和审核状态,我们可以构建一个评论列表的显示逻辑:

<div class="comment-section">
    {% commentList comments with archiveId=archive.Id type="page" limit="10" %}
        {% 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.Parent.Status != 1 %}
                                审核中:{{item.Parent.UserName|truncatechars:6}}
                            {% else %}
                                {{item.Parent.UserName}}
                            {% endif %}
                        </span>
                    {% endif %}

                    {# 显示评论时间 #}
                    <span>{{stampToDate(item.CreatedTime, "2006-01-02 15:04")}}</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 %}
                        该评论正在审核中,请耐心等待。
                    {% else %}
                        {{item.Content}}
                    {% endif %}
                </div>

                {# 评论点赞和回复按钮 (如果需要) #}
                <div class="comment-actions" data-id="{{item.Id}}" data-user="{{item.UserName}}">
                    <a href="javascript:;" class="praise-btn">赞(<span class="vote-count">{{item.VoteCount}}</span>)</a>
                    <a href="javascript:;" class="reply-btn">回复</a>
                </div>
            </div>
        {% endfor %}
    {% else %}
        <p>暂无评论,快来发表您的看法吧!</p>
    {% endcommentList %}
</div>

分页显示评论

commentList 标签的 type 参数设置为 "page" 时,它会与 pagination 标签协同工作,提供分页功能。在评论列表下方,您可以添加分页导航:

<div class="pagination-section">
    {% pagination pages with show="5" %}
        <a href="{{pages.FirstPage.Link}}">首页</a>
        {% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">上一页</a>{% endif %}
        {% for pageItem in pages.Pages %}
            <a class="{% if pageItem.IsCurrent %}active{% endif %}" href="{{pageItem.Link}}">{{pageItem.Name}}</a>
        {% endfor %}
        {% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">下一页</a>{% endif %}
        <a href="{{pages.LastPage.Link}}">尾页</a>
    {% endpagination %}
</div>

显示网站留言列表

对于网站留言,如果后台配置了显示列表,其模板标签和展示逻辑与评论列表类似,您可能需要定义一个类似的标签,或者通过自定义查询来实现。但在多数情况下,网站留言更多是用于收集信息,后端管理查看为主,前端不直接展示完整列表。如果您需要展示,可能需要通过archiveList或自定义标签来获取特定的留言内容并手动构建显示逻辑。

用户提交评论或留言

用户在前台提交评论或留言时,通常会通过HTML表单完成。安企CMS提供了相应的后端接口来接收这些数据。

  • 评论提交: 提交至 /comment/publish 接口。表单中需要包含 archive_id(文章ID)、user_name(用户昵称)、content(评论内容)等字段。如果回复特定评论,还需要 parent_id
  • 留言提交: 提交至 /guestbook.html 接口。表单字段会根据您在后台“网站留言”中自定义的字段来决定,通常包括 user_namecontact(联系方式)、content(留言内容)等。
  • 评论点赞: 如果您希望用户可以点赞评论,可以通过 POST 请求向 /comment/praise 接口提交评论的 id

提交后,评论或留言会进入后台等待处理,其审核状态(Status)默认为0(审核中),待管理员在后台审核通过后,其 Status 才会变为1,并最终显示在前台。

常见问题 (FAQ)

  1. 如何设置评论和留言是否需要审核? 安企CMS允许您灵活配置评论和留言的审核策略。通常,您可以在后台的“功能管理”或“内容设置”模块中找到相关选项,例如“评论默认状态”或“留言是否需要审核”等设置。您可以选择评论/留言发布后直接显示,还是需要人工审核后才能显示。

  2. 为什么我提交的评论没有立即显示在网站上? 这很可能是因为网站开启了评论/留言审核机制。您的评论提交后,会先进入后台管理系统,等待网站管理员进行审核。只有管理员审核通过后,评论的 Status 字段才会变为1,从而在前台页面显示出来。您可以联系网站管理员了解具体的审核流程。

  3. 如何在评论列表中显示多级回复(即用户回复了其他用户的评论)?commentList 标签的循环中,每条评论数据 item 都包含一个 item.Parent 字段。如果 item.Parent 不为空,则表示当前评论是针对 item.Parent 这条评论的回复。您可以通过检查 item.Parent 的存在性,并显示 item.Parent.UserNameitem.Parent.Content 来构建多级回复的显示结构,就像上面的代码示例中展示的那样。如果需要更复杂的树状回复结构,您可能需要在前端使用JavaScript对评论数据进行进一步处理。