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:执行筛选的用户IDentityType:被筛选的实体类型(如"product")entityIdFilters:用于数据库筛选的已标记实体ID列表
内部实现
领域层
聚合根
本模块遵循实体最佳实践与规范。
UserMarkedItem
用户标记项代表用户对项目的标记记录。
UserMarkedItem(聚合根):表示系统中的标记项实体
仓储
本模块遵循仓储最佳实践与规范。
为此功能定义的定制仓储:
IUserMarkedItemRepository
领域服务
本模块遵循领域服务最佳实践与规范。
标记项管理器
MarkedItemManager用于执行UserMarkedItem聚合根的相关操作。
应用层
应用服务
MarkedItemPublicAppService(实现IMarkedItemPublicAppService):实现标记系统的用例逻辑
数据库支持
通用配置
表/集合前缀与模式
所有表/集合默认使用Cms前缀。可通过修改CmsKitDbProperties类的静态属性调整前缀或设置模式名称(取决于数据库提供商支持)。
连接字符串
本模块使用CmsKit作为连接字符串名称。若未定义该名称的连接字符串,将回退至Default连接字符串。
详见 连接字符串文档 。
Entity Framework Core
数据表
- CmsUserMarkedItems
MongoDB
集合
- CmsUserMarkedItems
抠丁客



