评论模板标签

iCMS 评论系统标签文档

评论标签 (CommentFunc)

评论标签用于获取和显示评论数据,支持列表展示、表单提交等功能。

comment:list 标签

获取评论列表数据。

支持参数

参数名 类型 默认值 说明
row 整数 10 每页显示条数
cache 布尔值 0 是否缓存结果
time 整数 -1 缓存时间(秒)
page 布尔值 0 是否启用分页
status 整数 1 状态(1:正常)
appid 整数 - 应用ID
userid 整数 - 用户ID
cid 整数 - 分类ID
iid 整数 - 内容ID
indexid 整数 - 索引ID(同iid)
orderby 字符串 id 排序字段
by 字符串 DESC 排序方式(ASC/DESC)

返回数据结构

[
    [
        'id' => 评论ID,
        'appid' => 应用ID,
        'iid' => 内容ID,
        'cid' => 分类ID,
        'userid' => 用户ID,
        'username' => 用户名,
        'content' => 评论内容,
        'pubdate' => 发布时间,
        'status' => 状态,
        'statusText' => 状态文本,
        'user' => [用户信息],
        'apps' => [应用信息],
        'lou' => 楼层数,
        'total' => 总评论数
    ],
    // 更多评论...
]

使用示例

<div class="comment-list">
  <h3>评论列表</h3>
<!--{iCMS:comment:list iid='$article.id' appid='1' row='10' page='1' cache='1'}-->
  <div class="comment-item">
    <div class="user">
      <img src="<!--{$comment_list.user.avatar}-->" alt="<!--{$comment_list.user.name}-->">
      <span><!--{$comment_list.user.name}--></span>
    </div>
    <div class="content"><!--{$comment_list.content}--></div>
    <div class="meta">
      <span><!--{$comment_list.pubdate|date:'Y-m-d H:i:s'}--></span>
      <span><!--{$comment_list.lou}-->楼</span>
    </div>
  </div>
<!--{iCMSelse}-->
  <div class="no-comment">暂无评论</div>
<!--{/iCMS}-->
</div>
<!--{iCMS:pages 
    page_style='3'
    item='<li class="page-item %s">%s</li>'
    link='<a class="page-link" href="%s" data-pageno="%d" %s>%s</a>'
}-->
<nav class="mb-4" caria-label="Page navigation">
    <ul class="pagination justify-content-center flex-wrap">
        <!--{$iCMS.PAGE.NAV}-->
    </ul>
</nav>

comment:data 标签

获取单条评论数据。

支持参数

参数名 类型 默认值 说明
id 整数 - 评论ID
userid 整数 - 用户ID
status 整数 1 状态
loop 布尔值 0 是否循环输出

返回数据结构

{
    'id' => 评论ID,
    'appid' => 应用ID,
    'iid' => 内容ID,
    'cid' => 分类ID,
    'userid' => 用户ID,
    'username' => 用户名,
    'content' => 评论内容,
    'pubdate' => 发布时间,
    'status' => 状态,
    'user' => [用户信息]
}

使用示例

<!--{iCMS:comment:data id='1'}-->
<div class="comment-detail">
  <div class="user">
    <img src="<!--{$comment_data.user.avatar}-->" alt="<!--{$comment_data.user.name}-->">
    <span><!--{$comment_data.user.name}--></span>
  </div>
  <div class="content"><!--{$comment_data.content}--></div>
  <div class="meta">
    <span><!--{$comment_data.pubdate|date:'Y-m-d H:i:s'}--></span>
  </div>
</div>

comment:form 标签

显示评论表单。

支持参数

参数名 类型 默认值 说明
iid 整数 - 内容ID(必填)
cid 整数 - 分类ID
appid 整数 - 应用ID(必填)
title 字符串 - 标题(必填)
userid 整数 - 用户ID
username 字符串 - 用户名
display 字符串 - 显示方式(iframe等)
hidden 布尔值 0 是否隐藏
class 字符串 - 自定义CSS类
throw 布尔值 true 是否抛出错误

使用示例

<!--{iCMS:comment:form iid='$article.id' appid='1' cid='$article.cid' title='$article.title'}-->

comment:vlist 标签

显示评论列表视图。

使用示例

<!--{iCMS:comment:vlist}-->

评论回复标签 (CommentReplyFunc)

评论回复标签用于获取和显示评论回复数据。

comment:reply:list 标签

获取评论回复列表。

支持参数

参数名 类型 默认值 说明
row 整数 10 每页显示条数
cache 布尔值 0 是否缓存结果
time 整数 -1 缓存时间(秒)
page 布尔值 0 是否启用分页
status 整数 1 状态
comment_id 整数 - 评论ID
userid 整数 - 用户ID
by 字符串 ASC 排序方式(ASC/DESC)
isRaw 布尔值 0 是否原始输出内容

返回数据结构

[
    [
        'id' => 回复ID,
        'comment_id' => 评论ID,
        'userid' => 用户ID,
        'username' => 用户名,
        'reply_userid' => 被回复用户ID,
        'reply_username' => 被回复用户名,
        'content' => 回复内容,
        'pubdate' => 发布时间,
        'status' => 状态,
        'status_text' => 状态文本,
        'user' => [用户信息],
        'reply_user' => [被回复用户信息],
        'lou' => 楼层数,
        'total' => 总回复数,
        'is_up' => 是否点赞,
        'is_down' => 是否点踩
    ],
    // 更多回复...
]

使用示例

<div class="reply-list">
  <h4>回复列表</h4>
<!--{iCMS:comment:reply:list comment_id='$comment.id' row='5' page='1' cache='1'}-->
  <div class="reply-item">
    <div class="user">
      <img src="<!--{$comment_reply_list.user.avatar}-->" alt="<!--{$comment_reply_list.user.name}-->">
      <span><!--{$comment_reply_list.user.name}--></span>
      <!--{if $comment_reply_list.reply_user}-->
        回复
        <img src="<!--{$comment_reply_list.reply_user.avatar}-->" alt="<!--{$comment_reply_list.reply_user.name}-->">
        <span><!--{$comment_reply_list.reply_user.name}--></span>
      <!--{/if}-->
    </div>
    <div class="content"><!--{$comment_reply_list.content}--></div>
    <div class="meta">
      <span><!--{$comment_reply_list.pubdate|date:'Y-m-d H:i:s'}--></span>
      <span><!--{$comment_reply_list.lou}-->楼</span>
    </div>
  </div>
<!--{iCMSelse}-->
  <div class="no-reply">暂无回复</div>
<!--{/iCMS}-->
</div>
<!--{iCMS:pages 
    page_style='3'
    item='<li class="page-item %s">%s</li>'
    link='<a class="page-link" href="%s" data-pageno="%d" %s>%s</a>'
}-->
<nav class="mb-4" caria-label="Page navigation">
    <ul class="pagination justify-content-center flex-wrap">
        <!--{$iCMS.PAGE.NAV}-->
    </ul>
</nav>

最佳实践

完整评论系统示例

<!-- 评论表单 -->
<!--{iCMS:comment:form iid='$article.id' appid='1' cid='$article.cid' title='$article.title'}-->

<!-- 评论列表 -->
<!--{iCMS:comment:list iid='$article.id' appid='1' row='10' page='1' cache='1'}-->
<!--{if $comment_lists_total>0}-->
  <div class="comment-list">
    <h3>评论列表(<!--{$comment_lists_total}-->条)</h3>
    <!--{foreach key="key" value="comment" from="$comment_list"}-->
      <div class="comment-item" id="comment-<!--{$comment.id}-->">
        <div class="user">
          <img src="<!--{$comment.user.avatar}-->" alt="<!--{$comment.user.name}-->">
          <span><!--{$comment.user.name}--></span>
        </div>
        <div class="content"><!--{$comment.content}--></div>
        <div class="meta">
          <span><!--{$comment.pubdate|date:'Y-m-d H:i:s'}--></span>
          <span><!--{$comment.lou}-->楼</span>
          <a href="javascript:;" class="reply-btn" data-id="<!--{$comment.id}-->">回复</a>
        </div>

        <!-- 回复列表 -->
        <!--{iCMS:comment:reply:list comment_id='$comment.id' row='5' cache='1'}-->
          <!--{if $comment_reply_lists_total>0}-->
            <div class="reply-list">
              <!--{foreach key="rkey" value="reply" from="$comment_reply_list"}-->
                <div class="reply-item">
                  <div class="user">
                    <span><!--{$reply.user.name}--></span>
                    <!--{if $reply.reply_user}-->
                      回复
                      <span><!--{$reply.reply_user.name}--></span>
                    <!--{/if}-->
                  </div>
                  <div class="content"><!--{$reply.content}--></div>
                  <div class="meta">
                    <span><!--{$reply.pubdate|date:'Y-m-d H:i:s'}--></span>
                  </div>
                </div>
              <!--{/foreach}-->
            </div>
          <!--{/if}-->
        <!--{/iCMS}-->
      </div>
    <!--{/foreach}-->
  </div>
  <div class="paging"><!--{$comment_lists_page.pagination}--></div>
<!--{else}-->
  <div class="no-comment">暂无评论</div>
<!--{/if}-->

性能优化建议

  1. 合理使用缓存

    <!--{iCMS:comment:list row='10' cache='1' time='300'}-->

    ⚠️ 对于评论数据,建议缓存时间不要太长,以保证数据的实时性。

  2. 分页显示

    对于评论数量较多的页面,始终使用分页:

    <!--{iCMS:comment:list row='10' page='1' cache='1'}-->
  3. 按需加载回复

    可以考虑使用AJAX按需加载回复内容,减轻页面初始加载压力。

安全注意事项

  1. XSS防护

    评论内容可能包含恶意代码,系统会自动过滤,但在显示时也需注意。

  2. 权限控制

    根据用户权限显示不同的评论操作按钮:

    <!--{if $user.uid}-->
      <a href="javascript:;" class="reply-btn">回复</a>
    <!--{else}-->
      <a href="<!--{$site.url}-->/user/login.php">登录后回复</a>
    <!--{/if}-->
  3. 敏感词过滤

    系统会自动过滤敏感词,但在模板中也可以添加额外的提示。

调试技巧

  1. 开启调试模式
    <!--{iCMS:comment:list db_debug='1'}-->