项目

CMS 工具包:标记项系统

CMS 工具包提供了一套标记系统,可将博客文章或产品等各类资源标记为收藏、加星、标注或书签。

标记切换组件允许用户通过预定义的图标/表情来标记您的项目。以下是标记切换组件的外观示例:

标记项

您还可以自定义切换组件中显示的标记图标。

启用标记项功能

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

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

配置选项

标记系统提供了简单的方式来定义实体类型及其标记类型(如收藏或加星)。例如,若需为产品启用标记系统,需要定义名为product的实体类型并指定图标名称。

可在模块的ConfigureServices方法中配置CmsKitMarkedItemOptions

Configure<CmsKitMarkedItemOptions>(options =>
{
    options.EntityTypes.Add(
        new MarkedItemEntityTypeDefinition(
            "product",
            StandardMarkedItems.Favorite
            )
        );
});

配置参数说明:

  • EntityTypes:标记系统中已定义的实体类型列表

实体类型定义属性:

  • EntityType:实体类型名称
  • IconName:图标名称

标记项小组件

标记系统提供切换小组件,允许用户对项目添加/移除标记。可通过以下方式嵌入小组件:

@await Component.InvokeAsync(typeof (MarkedItemToggleViewComponent), new
{
    entityId = "...",
    entityType = "product",
    needsConfirmation = true // (可选参数)
})
  • entityType对应前文定义的实体类型
  • entityId应为目标实体唯一标识符(本例中使用产品ID)
  • needsConfirmation为可选参数,控制移除标记时是否需要用户确认

标记项筛选功能

用户可通过筛选功能快速定位已标记内容。以下示例演示如何在仓储查询中使用GetEntityIdsFilteredByUserAsync方法:

List<string> entityIdFilters = null;
if (userId.HasValue)
{
    entityIdFilters = await UserMarkedItemRepository.GetEntityIdsFilteredByUserAsync(
        userId.Value, 
        entityType, 
        cancellationToken: cancellationToken
    );
}

var queryable = (await GetDbSetAsync())
    .WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString()));

// 可继续添加其他查询逻辑...

参数说明:

  • GetEntityIdsFilteredByUserAsync:获取用户对指定实体类型的标记ID列表
  • userId:执行筛选的用户ID
  • entityType:被筛选的实体类型(如"product")
  • entityIdFilters:用于数据库筛选的已标记实体ID列表

内部实现

领域层

聚合根

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

UserMarkedItem

用户标记项代表用户对项目的标记记录。

  • UserMarkedItem(聚合根):表示系统中的标记项实体

仓储

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

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

  • IUserMarkedItemRepository

领域服务

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

标记项管理器

MarkedItemManager用于执行UserMarkedItem聚合根的相关操作。

应用层

应用服务

  • MarkedItemPublicAppService(实现IMarkedItemPublicAppService):实现标记系统的用例逻辑

数据库支持

通用配置

表/集合前缀与模式

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

连接字符串

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

详见 连接字符串文档

Entity Framework Core

数据表
  • CmsUserMarkedItems

MongoDB

集合
  • CmsUserMarkedItems
在本文档中