项目

CMS Kit:评论功能

CMS Kit 提供了一套评论系统,可以为博客文章、产品等各类资源添加评论功能。

启用评论功能

CMS Kit功能默认处于禁用状态。因此,在使用前需要先启用所需功能。您可以通过全局功能系统在开发阶段启用/禁用CMS Kit功能,或使用ABP的功能系统在运行时禁用CMS Kit功能。

请参阅CMS Kit模块文档的"如何安装"章节了解开发阶段启用/禁用CMS Kit功能的方法。

配置选项

评论系统提供了按实体类型分组评论定义的机制。例如,若需为博客文章和产品启用评论功能,需要分别创建名为BlogPostsProduct的实体类型,并在这些实体类型下添加评论。

可在领域层的模块ConfigureServices方法中配置CmsKitCommentOptions

Configure<CmsKitCommentOptions>(options =>
{
    options.EntityTypes.Add(new CommentEntityTypeDefinition("Product"));
    options.IsRecaptchaEnabled = true; //默认值为false
    options.AllowedExternalUrls = new Dictionary<string, List<string>>
    {
      {
        "Product",
        new List<string>
        {
          "https://abp.io/"
        }
      }
    };
});

如果使用博客功能,ABP会自动为博客功能定义实体类型。您可以通过上述示例中的Configure方法轻松覆写或移除预定义的实体类型。

CmsKitCommentOptions属性说明:

  • EntityTypes:评论系统中定义的实体类型列表(CmsKitCommentOptions
  • IsRecaptchaEnabled:启用/禁用评论系统的reCaptcha验证功能。如需使用reCaptcha请设置为true
  • AllowedExternalUrls:按实体类型指定评论中允许包含的外部URL。若为某实体类型指定此配置,则仅允许包含指定外部URL的评论

CommentEntityTypeDefinition属性说明:

  • EntityType:实体类型名称

评论组件

评论系统提供评论组件,允许用户在公开网站上对资源发表评论。可通过以下方式在页面中嵌入组件:

@await Component.InvokeAsync(typeof(CommentingViewComponent), new
{
  entityType = "Product",
  entityId = "...",
  isReadOnly = false,
  referralLinks  = new [] {"nofollow"}
})

其中entityType已在前文说明,entityId在此示例中应为产品的唯一标识符(如Product实体的Id)。referralLinks为可选参数,可用于为链接的rel属性添加值(如"nofollow"、"noreferrer"等)。

用户界面

菜单项

评论功能为管理应用添加以下菜单项:

  • 评论管理:打开评论管理页面

页面

评论管理

在此页面可查看和管理评论:

评论页面

同时可查看和管理回复:

评论详情

设置

通过设置页面"Cms"标签下的"Comment"选项卡可配置评论审核状态。启用此功能后,可对评论进行审核与驳回,用户仅能查看已通过审核的评论。该功能默认设置为"false"。

评论设置

内部实现

领域层

聚合根

本模块遵循实体最佳实践与规范

评论

评论代表用户提交的文本评论:

  • Comment(聚合根):代表系统中的文本评论

仓储

本模块遵循仓储最佳实践与规范

为此功能定义的定制仓储:

  • ICommentRepository

领域服务

本模块遵循领域服务最佳实践与规范

评论管理器

CommentManager用于执行Comment聚合根的相关操作。

应用层

应用服务

  • CommentAdminAppService(实现ICommentAdminAppService):实现评论管理系统的用例,如列表展示、删除评论等
  • CommentPublicAppService(实现ICommentPublicAppService):实现公开网站评论管理用例,如展示评论、添加评论等

数据库支持

通用配置

数据表/集合前缀与模式

所有数据表/集合默认使用Cms前缀。如需修改表前缀或设置模式名(取决于数据库提供商支持),可通过设置CmsKitDbProperties类的静态属性实现。

连接字符串

本模块使用CmsKit作为连接字符串名称。若未定义此名称的连接字符串,将回退至Default连接字符串。

详见连接字符串文档。

Entity Framework Core

数据表
  • CmsComments

MongoDB

集合
  • CmsComments
在本文档中