项目

CMS Kit:互动系统

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

互动组件允许用户通过预定义的图标/表情对内容进行反馈。以下是互动组件的外观示例:

互动界面

您还可以自定义互动组件中显示的图标。

启用互动功能

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

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

配置选项

互动系统支持按实体类型对互动进行分组。例如,若需为商品添加互动功能,需要先定义名为 Product 的实体类型,然后在该类型下配置互动选项。

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

Configure<CmsKitReactionOptions>(options =>
{
    options.EntityTypes.Add(
        new ReactionEntityTypeDefinition(
            "Product",
            reactions: new[]
            {
                new ReactionDefinition(StandardReactions.Smile),
                new ReactionDefinition(StandardReactions.ThumbsUp),
                new ReactionDefinition(StandardReactions.ThumbsDown),
                new ReactionDefinition(StandardReactions.Confused),
                new ReactionDefinition(StandardReactions.Eyes),
                new ReactionDefinition(StandardReactions.Heart)
            }));
});

如果您使用评论博客功能,ABP 会自动为这些功能预定义互动选项。

配置参数说明:

  • EntityTypes:互动系统中定义的实体类型列表(CmsKitReactionOptions类型)

ReactionEntityTypeDefinition 属性:

  • EntityType:实体类型名称
  • Reactions:该实体类型下定义的互动列表(ReactionDefinition类型)

互动组件

互动系统提供可视化组件以便用户对资源发送反馈。可通过以下方式在页面中嵌入组件:

@await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new
{
  entityType = "Product",
  entityId = "..."
})

其中 entityType 对应前文定义的实体类型,entityId 在此示例中应为商品的唯一标识符。如果使用 Product 实体,可直接传入其 Id。

实现原理

领域层

聚合体

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

用户互动(UserReaction)

表示用户发起的单次互动记录:

  • UserReaction(聚合根):代表系统中的单次互动记录

仓储

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

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

  • IUserReactionRepository

领域服务

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

互动管理器

ReactionManager 用于执行 UserReaction 聚合根的相关操作。

应用层

应用服务

  • ReactionPublicAppService(实现 IReactionPublicAppService):实现互动系统的用例逻辑

数据库支持

通用配置

数据表/集合前缀与模式

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

连接字符串

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

详细说明请参阅连接字符串文档

Entity Framework Core

数据表
  • CmsUserReactions

MongoDB

集合
  • CmsUserReactions
在本文档中